3.1 HttpServletResponse 클래스

서블릿 메서드를 호출한 후 service()웹 컨테이너는 HttpServletResponse. 따라서 클라이언트에 대한 응답에 어떤 식으로든 영향을 미치려면 이 개체를 수정해야 합니다.

서버 응답은 세 부분으로 구성됩니다.

  • 상태 표시줄(예: 200 OK)
  • 헤더
  • 응답 본문

그리고 수업방식 HttpServletResponse도 3가지로 나뉜다? 거의:

행동 양식 설명
1 void setStatus(int sc) 응답 상태 코드를 설정합니다.
2 void sendError(int sc) 지정된 코드를 사용하여 클라이언트에 오류를 보냅니다.
void sendError(int sc, String msg) 지정된 코드 및 메시지와 함께 오류를 클라이언트에 보냅니다.
4 void addHeader(String name, String value) 응답 헤더 목록에 헤더를 추가합니다.
5 void setHeader(String name, String value) 응답 헤더 목록의 헤더를 변경합니다.
6 boolean containsHeader(String name) 헤더가 이미 존재하는지 확인합니다.
7 void addCookie(Cookie cookie) 응답에 쿠키를 추가합니다.
8 void sendRedirect(String location) 클라이언트를 다른 URL로 리디렉션합니다.
9 String encodeRedirectURL(String url) sendRedirect 메서드에서 사용하기 위해 지정된 URL을 인코딩합니다.
10 String encodeURL(String url) 세션 ID를 포함하여 지정된 URL을 인코딩합니다.
열하나 void setContentType(String type) 결과의 MimeType을 설정합니다.
12 void setContentLength(int len) 응답 본문의 길이를 설정합니다.
13 void setCharacterEncoding(String charset) 응답 인코딩 세트를 설정합니다.
14 void setBufferSize(int size) 응답 본문의 버퍼 크기를 설정합니다.
15 boolean isCommitted() 버퍼가 이미 응답에 기록되었는지 확인합니다.
16 void flushBuffer() 버퍼의 내용을 응답에 씁니다.
17 void reset() 버퍼, 헤더 및 응답 코드에 저장된 모든 데이터를 재설정합니다.
18 void resetBuffer() 응답 버퍼를 지웁니다.

여기의 방법은 매우 사소합니다. 하지만 아래에서 몇 가지 중요한 사항을 알려드리겠습니다.

버퍼 . 서블릿의 응답은 사용자에게 즉시 전송되지 않고 버퍼에 기록됩니다. 따라서 일부 단계에서(예를 들어 오류가 발생한 경우) 버퍼에 기록된 모든 항목을 재설정(지우기)할 수 있습니다. reset() 메서드를 호출하여 버퍼의 내용뿐 아니라 응답 코드가 포함된 헤더도 지울 수 있습니다.

3.2 리디렉션()

두 번째 중요한 점은 리디렉션입니다. 서블릿이 클라이언트를 다른 URL로 리디렉션하기로 결정하면 어떻게든 이 URL을 클라이언트로 보내야 합니다. 이것은 를 사용하여 수행할 수 있습니다 sendRedirect.

그러나 중요한 뉘앙스가 있습니다. URI는 응답 본문에 허용된 것보다 더 넓은 범위의 문자를 포함할 수 있습니다. 따라서 메소드를 호출하기 전에 먼저 URL을 유효한 문자 집합으로 인코딩해야 합니다 sendRedirect(). 이를 위한 특별한 방법이 있습니다 encodeRedirectURL(String url). 그걸 써.

리디렉션 예:


public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 getWriter() 메서드

이제 텍스트를 응답 본문으로 작성하는 방법을 배웁니다. 이를 위해 클래스에는 객체를 반환하는 HttpServletResponse특수 메서드가 있습니다 . 잊어버린 사람이 있다면 이것은 이름이 있는 필드 유형입니다 .getWriter()PrintStreamSystem.out

일부 텍스트를 서블릿 응답으로 작성하려면 다음이 필요합니다.

  • 를 호출하여 PrintStream 개체를 가져옵니다 response.getWriter().
  • PrintStream 개체에 필요하다고 생각하는 모든 것을 씁니다(모든 데이터는 버퍼에 기록됨).
  • close()PrintStream에서 메서드를 호출하여 버퍼를 사용자에게 보냅니다 .

a두 개의 숫자를 더하고 b그 결과를 사용자에게 반환하는 서블릿을 작성해 보겠습니다 .



public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” и “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");
 
        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);
 
            // Печатаем HTML в качестве ответа для браузера
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
 
            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}