English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 서버 HTTP 응답

그 전 장에서 논의했듯이, 웹 서버가 HTTP 요청에 응답할 때, 응답은 일반적으로 상태 행, 몇 가지 응답 헤더, 빈 행, 그리고 문서로 구성됩니다. 일반적인 응답은 다음과 같습니다:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>.../head>
<body>
...
</body>
</html>

상태 행은 HTTP 버전(이 예제에서는 HTTP/1.1)、상태 코드(이 예제에서는 200)과 상태 코드에 대한 짧은 메시지(이 예제에서는 OK)를 요약합니다.

아래 표는 웹 서버에서 브라우저로 반환되는 가장 유용한 HTTP 1.1 응답 헤더는 웹 프로그래밍에서 자주 사용됩니다:

헤더 정보설명
Allow이 헤더 정보는 서버가 지원하는 요청 메서드(GET, POST 등)를 지정합니다.
Cache-Control이 헤더 정보는 응답 문서가 어떤 상황에서 안전하게 캐시에 저장될 수 있는지 지정합니다. 가능한 값은 다음과 같습니다:public, private 또는 no-cache Public은 문서가 캐시에 저장 가능하며, Private은 문서가 단일 사용자의 개인 문서이며, 대시보드(공유) 캐시에 저장될 수 없음을 의미합니다., no-cache는 문서가 캐시에 저장되지 않도록 의미합니다.
Connection브라우저가 지속적인 HTTP 연결을 사용하는지 여부를 나타냅니다. 값 close 브라우저가 지속적인 HTTP 연결을 사용하지 않도록 지시합니다. 값 keep-alive 는 지속적인 연결을 의미합니다.
Content-Disposition이 헤더 정보는 브라우저가 응답을 사용자가 지정한 이름의 파일로 디스크에 저장하도록 요청할 수 있게 합니다.
Content-Encoding전송 중에, 이 헤더 정보는 페이지의 인코딩 방식을 지정합니다.
Content-Language이 헤더 정보는 문서 작성에 사용된 언어를 나타냅니다. 예를 들어, en, en-us, ru 등에서만 사용됩니다.
Content-Length이 헤더 정보는 응답에 포함된 바이트 수를 나타냅니다. 오직 브라우저가 지속적인 (keep-alive) HTTP 연결 시에만 이 정보가 필요합니다.
Content-Type이 헤더 정보는 응답 문서의 MIME (Multipurpose Internet Mail Extension) 타입을 제공합니다.
Expires이 헤더 정보는 내용이 캐시에 저장되지 않도록 내용이 만료된 시간을 지정합니다.
Last-Modified이 헤더 정보는 문서의 마지막 수정 시간을 나타냅니다. 그런 다음, 클라이언트는 파일을 캐시에 저장하고, 이후 요청에서 If-Modified-Since 요청 헤더 정보는 날짜를 제공합니다.
Location이 헤더 정보는 모든 상태 코드를 포함한 응답에 포함되어야 합니다. 그리고 300s 내에, 이는 브라우저가 문서 주소를 알립니다. 브라우저는 자동으로 이 위치로 재접속하여 새로운 문서를 가져옵니다.
Refresh이 헤더 정보는 브라우저가 가장 빨리 페이지를 업데이트해야 하는 방법을 지정합니다. 페이지 새로고침 초수를 지정할 수 있습니다.
Retry-After이 헤더 정보는 다음과 함께 사용될 수 있습니다. 503서비스 유닛 불가용) 응답과 함께 사용되어, 클라이언트가 얼마나 오래 기다려야 할지를 알립니다.
Set-Cookie이 헤더 정보는 페이지와 연관된 쿠키를 지정합니다.

HTTP 응답 헤더 설정 메서드

이하의 메서드는 Servlet 프로그램에서 HTTP 응답 헤더를 설정하는 데 사용할 수 있습니다. 이 메서드는 다음과 같이 HttpServletResponse 객체 사용 가능

순번메서드 & 설명
1String encodeRedirectURL(String url)
sendRedirect 메서드에서 사용할 지정된 URL을 인코딩하거나, 인코딩이 필요하지 않으면 URL이 변경되지 않습니다.
2String encodeURL(String url)
세션 회의 ID를 포함한 지정된 URL을 인코딩하거나, 인코딩이 필요하지 않으면 URL이 변경되지 않습니다.
3boolean containsHeader(String name)
이미 이름이 지정된 응답 헤더가 설정되었는지 여부를 나타내는 부울 값을 반환합니다.
4boolean isCommitted()
응답이 이미 제출되었는지 여부를 나타내는 부울 값을 반환합니다.
5void addCookie(Cookie cookie)
지정된 쿠키를 응답에 추가합니다.
6void addDateHeader(String name, long date)
지정된 이름과 날짜 값을 가진 응답 헤더를 추가합니다.
7void addHeader(String name, String value)
지정된 이름과 값을 가진 응답 헤더를 추가합니다.
8void addIntHeader(String name, int value)
지정된 이름과 정수 값을 가진 응답 헤더를 추가합니다.
9void flushBuffer()
버퍼에 있는 모든 내용을 클라이언트로 강제로 쓰도록 합니다.
10void reset()
버퍼에 존재하는 모든 데이터를 지우지만, 상태 코드와 헤더를 포함합니다.
11void resetBuffer()
기본 버퍼의 내용을 지우지만, 상태 코드와 헤더를 지우지 않습니다.
12void sendError(int sc)
지정된 상태 코드를 사용하여 클라이언트로 에러 응답을 보냅니다. 또한, 버퍼를 비웁니다.
13void sendError(int sc, String msg)
지정된 상태를 사용하여 클라이언트로 에러 응답을 보냅니다.
14void sendRedirect(String location)
지정된 URL 위치를 사용하여 클라이언트로 대시렉션 응답을 보냅니다.
15void setBufferSize(int size)
응답 본체에 최적의 버퍼 크기를 설정합니다.
16void setCharacterEncoding(String charset)
클라이언트로 보내는 응답의 문자 인코딩(ميمي 문자 집합)을 설정합니다. 예를 들어, UTF-8.
17void setContentLength(int len)
HTTP Servlet 응답에서 내용 본체의 길이를 설정하는 메서드를 사용하여 HTTP Content-Length 헤더。
18void setContentType(String type)
응답이 아직 제출되지 않았다면, 클라이언트로 보내는 응답의 내용 유형을 설정합니다.
19void setDateHeader(String name, long date)
지정된 이름과 날짜 값을 가진 응답 헤더를 설정합니다.
20void setHeader(String name, String value)
지정된 이름과 값을 가진 응답 헤더를 설정합니다.
21void setIntHeader(String name, int value)
지정된 이름과 정수 값을 가진 응답 헤더를 설정합니다.
22void setLocale(Locale loc)
응답이 아직 제출되지 않았다면, 응답의 지역을 설정합니다.
23void setStatus(int sc)
이 응답의 상태 코드를 설정합니다.

HTTP 헤더 응답 예제

setContentType() 메서드를 이미 전체 예제에서 본 것처럼, 아래의 예제도 같은 메서드를 사용하며, 또한, 우리는 setIntHeader() 메서드를 사용하여 설정 Refresh 헤더。

//必需的 java 库을 가져오기
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Refresh")
//HttpServlet 클래스 확장
public class Refresh extends HttpServlet {
    // GET 메서드 요청 처리 메서드
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          // 자동 로드 갱신 시간 설정 5 초
          response.setIntHeader("Refresh", 5);
          // 응답 내용 유형 설정
          response.setContentType("text/html;charset=UTF-8");
         
          //기본 시区和 언어 환경을 사용하여 일정을 얻습니다  
          Calendar cale = Calendar.getInstance();  
          //Calendar 타입을 Date 타입으로 변환  
          Date tasktime=cale.getTime();  
          //날짜 출력 형식 설정  
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //형식화 출력  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "자동갱신 헤더 설정 - 기본教程網示例";
          String docType =
          "<!DOCTYPE html>\n";
          out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align="center">" + title + "</h1>\n" +
            "<p>현재 시간은:" + nowTime + "</p>\n");
      }
      // POST 메서드 요청을 처리하는 메서드
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

이 테스트 예제는 TomcatTest 프로젝트 아래에 위치하고, 해당 web.xml 설정은 다음과 같습니다:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet  
     <!-- 클래스 이름 -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- 의 패키지 -->  
    <servlet-class>com.w3codebox.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- 방문한 웹사이트 -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app>

이제, 위의 Servlet을 호출하여, 매 5 현재 시스템 시간이 나타납니다. Servlet을 실행하고 잠시 기다리면 다음과 같은 결과를 볼 수 있습니다: