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()
PrintStream
System.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();
}
}
}
GO TO FULL VERSION