HttpServletResponse 역할
- HTTP 응답, 헤더, 바디 생성
- Content-Type, Cookie, Redirect 등의 기능 제공
응답 Header
새로 response 폴더를 만들고 ResponseHeaderServlet.java를 생성했다.
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// status-line
res.setStatus(HttpServletResponse.SC_OK);
// response header
res.setContentType("text/plain");
res.setCharacterEncoding("utf-8");
//res.setHeader("Content-Type", "text/plain;charset=utf-8");
res.setHeader("Cache-Contorl", "no-cache, no-store, must-revalidate");
res.setHeader("Pragma", "no-cache");
res.setHeader("temp-header", "hello world");
PrintWriter writer = res.getWriter();
writer.println("ok");
}
}
HttpServletResponse는 기본적으로 .setHeader()를 통해 헤더를 세팅할 수 있다.
이 외에도 setContentType, setCharacterEncoding 등을 사용할 수 있다.
이 외에도 쿠키나 리다이렉트를 설정할 수 있는데, 예제로는 아래와 같다.
쿠키 설정하기
private void cookie (HttpServletResponse res) {
Cookie cookie = new Cookie("myCookie","good");
cookie.setMaxAge(600);
res.addCookie(cookie);
}
오류 1) Cookie(String, String)이 불가능하다는 오류가 뜰 경우, import를 잘 살펴봐라
-> import javax.servlet.http.Cookie;
리다이렉트 설정하기
private void redirect (HttpServletResponse res) {
res.setStatus(HttpServletResponse.SC_FOUND);
res.setHeader("Location", "/basic/hello-form.html");
// res.sendRedirect("/basic/hello-form.thml");
}
응답 데이터
html 형식으로 응답하기
ResponseHtmlServlet.java를 생성한다.
@WebServlet(name="responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
// Content-Type: text/html;charset=utf-8
res.setContentType("text/html");
res.setCharacterEncoding("utf-8");
PrintWriter writer = res.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>안녕?</div>");
writer.println("</body>");
writer.println("</html>");
}
}
한글이 깨지는 것을 대비해 ContentType과 Encoding을 설정해뒀다.
Json 형식으로 응답하기
ResponseJsonServlet.java 생성
@WebServlet(name="responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet{
private ObjectMapper mapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
res.setContentType("application/json");
res.setCharacterEncoding("utf-8");
// HelloData 객체
HelloData helloData = new HelloData();
helloData.setUsername("yeonlog");
helloData.setAge(25);
// json 형태로 바꾸기
String result = mapper.writeValueAsString(helloData);
res.getWriter().write(result);
}
}
HelloData에 값을 넣고, json 형태로 바꾸고 응답을 보내줬다.
Content-Type: application/json 형태로 잘 온 것을 확인할 수 있다.
추가적으로, application/json;charset=utf-8은 의미 없는 코드다.
json은 기본적으로 utf-8을 사용하기 때문에..
하지만 getWriter()를 사용하다보면 자동적으로 뒤에 추가되므로, 이 경우에는 getOutputStream()으로 출력하면 된다.
본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.
내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.
'Develop > Java' 카테고리의 다른 글
[JSP] 회원 관리 웹 애플리케이션 (0) | 2021.05.07 |
---|---|
[Servlet] 회원 관리 웹 애플리케이션 (0) | 2021.05.06 |
[Servlet] HTTP 요청 데이터 - GET, POST, Text, JSON (0) | 2021.04.30 |
[Servlet] HttpServletRequest 이용하기 (0) | 2021.04.09 |
[Servlet] 서블릿 프로젝트 (0) | 2021.04.09 |