HttpServletResponse 기본 사용법
HttpServletResponse - 기본 사용법
1. ResponseHeaderServlet (1)
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//[status-line]
response.setStatus(HttpServletResponse.SC_OK); // 200
//[response-headers]
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");
PrintWriter writer = response.getWriter();
writer.println("ok");
}
}
이렇게 하고 http://localhost:8080/response-header 확인해 보면
이게 가장 기본적인 기능이다.
2. ResponseHeaderServlet (2) - content 편의 메서드
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//[status-line]
response.setStatus(HttpServletResponse.SC_OK); // 200
//[response-headers]
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");
// 추가한 부분
//[Header 편의 메서드]
content(response);
PrintWriter writer = response.getWriter();
writer.println("ok");
}
private void content(HttpServletResponse response) {
// Content-Type: text/plain;charset=utf-8
// Content-Length: 3 // ln이면 3
// response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setContentType("text/plain"); // 이렇게들 넣으면 위에 것들이 자동으로 생성됨.
response.setCharacterEncoding("utf-8");
// response.setContentLength(2); //(생략시 자동 생성)
}
}
실행하면
똑같이 나온다.
3. ResponseHeaderServlet (3) - Cookie 편의 메서드
수정해보면
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//[status-line]
response.setStatus(HttpServletResponse.SC_OK); // 200
//[response-headers]
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");
//[Header 편의 메서드]
// content(response);
cookie(response);
PrintWriter writer = response.getWriter();
writer.println("ok");
}
private void content(HttpServletResponse response) {
// Content-Type: text/plain;charset=utf-8
// Content-Length: 3 // ln이면 3
// response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setContentType("text/plain"); // 이렇게들 넣으면 위에 것들이 자동으로 생성됨.
response.setCharacterEncoding("utf-8");
// response.setContentLength(2); //(생략시 자동 생성)
}
private void cookie(HttpServletResponse response) {
// Set-Cookie: myCookie=good; Max-Age=600;
// response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); //600초
response.addCookie(cookie);
}
}
- javax.servlet에 있는 Cookie를 써야 함.
response.addCookie(cookie); 이게 결국
// response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600"); 이것과 똑같은 기능을 수행.
실행하면
쿠키가 넣어져 있음을 확인할 수 있음.
Expires가 들어온 것은 톰캣에서 자동으로 추가해준 것.
새로고침하면 웹 브라우저에서 서버로 쿠키를 보낸다.
그럼 서버에서 쿠키값 그대로 읽어서 사용 가능하게 된다.
4. ResponseHeaderServlet (4) - Redirect 편의 메서드
추가한 코드
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//[status-line]
response.setStatus(HttpServletResponse.SC_OK); // 200
//[response-headers]
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header", "hello");
//[Header 편의 메서드]
// content(response);
// cookie(response);
redirect(response);
//[메시지 바디]
PrintWriter writer = response.getWriter();
writer.println("ok");
}
private void content(HttpServletResponse response) {
// Content-Type: text/plain;charset=utf-8
// Content-Length: 3 // ln이면 3
// response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setContentType("text/plain"); // 이렇게들 넣으면 위에 것들이 자동으로 생성됨.
response.setCharacterEncoding("utf-8");
// response.setContentLength(2); //(생략시 자동 생성)
}
private void cookie(HttpServletResponse response) {
// Set-Cookie: myCookie=good; Max-Age=600;
// response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); //600초
response.addCookie(cookie);
}
private void redirect(HttpServletResponse response) throws IOException {
//Status Code 302
//Location: /basic/hello-form.html
// response.setStatus(HttpServletResponse.SC_FOUND); //302
// response.setHeader("Location", "/basic/hello-form.html");
response.sendRedirect("/basic/hello-form.html");
}
}
response.setStatus(HttpServletResponse.SC_FOUND); //302
response.setHeader("Location", "/basic/hello-form.html");
이거 두 개를 세팅하면
//Status Code 302
//Location: /basic/hello-form.html
이 값이 나오게 되는 것.
아래 것이 덮어쓰기 되므로 위에 있는 OK 코드는 영향을 미치지 않는다.
실행한 결과를 보면
리다이렉트 정보가 있음.
상태코드가 302면서 Location이기 때문에 리다이렉트 작용이 일어난 것.
웹브라우저는 이를 인지하고
이 url로 바꿔서 실행해줌.
그런데 이건 너무 불편하므로 한 줄로 끝내는 방법을 쓰자.
그게 바로 가장 아랫줄에 있는 한 줄 코드
똑같음.
메시지 바디
PrintWriter writer = response.getWriter();
writer.println("ok");
response.getWriter(); 또는 response.getInputStream();을 얻을 수 있다.
여기에 원하는 값을 넣어주면 그 값이 메시지 바디에 들어가게 된다.