티스토리 뷰
서블릿 응답
- 클라이언트로 부터 온 요청을 담당하는 서블릿이 request를 처리하고 response를 보낸다. 이 response도 HTTP 프로토콜로서 형식을 만들어줘야 한다.
- 직접 문자열을 만들어서 반환해도 되지만 상상만해도 머리가 아프다. 이거를 서블릿이 필요한 값만 전달해주면 알아서 응답 메시지로 만들어서 반환해 준다.
- 응답코드, 응답 형식, 인코딩 설정, 캐시 설정 등을 할 수 있다.
응답 헤더 작성
Response Header의 구성요건을 직접 문자열로 작성하는 방법
@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);
// response header
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");
// message body
PrintWriter writer = response.getWriter();
writer.print("OK");
}
- /response-header로 요청이 오면 아래 서블릿이 처리를 하게 된다.
- 응답 메시지를 만드는 내용이 담겨있다.
200 OK, Content-Type, Cache-Control, Pragma, 커스텀 헤더(my-header), message-body 등
위와 같이 문자열로 작성해도 된다. 하지만 오타의 위험성이 있고 정확히 어디에 뭘 설정하는지 헷갈릴 수 있다.
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
따라서 위와같이 setXXX()함수를 사용해서 값을 넣을 수 있다.
Cookie 설정
// 문자열 세팅 방법
-> response.setHeader("Set-Cookie", "myCookie=good;Max-Age=600");
// 쿠키 객체 생성 후 세팅 방법
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); // 600초
response.addCookie(cookie);
Redirect 설정
HTTP Code 302로 "/basic/hello-form.html" 로 리다이렉트한다고 하자.
// 문자열로 세팅 방법
response.setStatus(HttpServletResponse.SC_FOUND); //302
response.setHeader("Location", "/basic/hello-form.html");
// sendRedirect() 함수 사용
response.sendRedirect("/basic/hello-form.html");
위와 같이 응답 패킷의 헤더를 작성하는 방법들이 존재한다. 클라이언트의 요청으로부터 적절한 응답을 쉽게 보내기 위해 서블릿은 다양한 기능을 갖고 있는것을 알 수 있다. 잘 기억해 두자.
응답 메시지 작성 - HTML
- Response로 HTML View를 보여주고 싶다면 HTML 형식에 맞게 작성해서 반환하면 된다.
- JSP, thymeleaf 등이 있지만 사용하지 않는 경우의 예시를 드는 것.
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>Hello?</div>");
writer.println("</body>");
writer.println("</html>");
}
}
- /response-html로 요청이 오면 HTML 코드가 응답 메시지로 가게 된다. 이때 Content-Type은 text/html로 해줘야 한다.
- 인코딩은 utf-8로 세팅
HTML 코드는 안보이고 렌더링 되어서 화면에 보여지고 있는걸 확인할 수 있다.
응답 메시지 작성 - JSON
- 현대에 서버-클라이언트 모델의 REST API 구조로 설계할 때 가장 많이 사용되는 데이터 전송 포맷이다.
- 딱 값을 key-value로 보내고 이를 처리하는 것은 프론트에게 맡긴다. 혹은 다른 외부서버에 맡긴다. (결제 서버 등)
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
HelloData helloData = new HelloData();
helloData.setUsername("woonsik");
helloData.setAge(28);
helloData.setJob("jobSeeker");
helloData.setSex("male");
String result = objectMapper.writeValueAsString(helloData);
response.getOutputStream().println(result);
}
}
- 먼저 보낼 Json 데이터를 객체화 하고, 해당 객체를 ObjectMapper를 이용해서 JSON 형식 문자열로 변환하여 보낸다.
- Content-Type은 application/json, 인코딩은 utf-8이다. JSON은 항상 utf-8이다.
받은 응답 메시지가 JSON 인 것을 확인할 수 있다.
응답 메시지의 Header 설정과 응답 메시지 바디에 넣는 데이터의 형식 등을 정리해보았다.
반응형
'스프링 > 스프링 MVC' 카테고리의 다른 글
MVC 패턴을 적용하여 간단한 회원 저장/조회 구현 (0) | 2021.12.29 |
---|---|
Servlet + JSP를 이용한 간단한 회원 저장/조회 구현 (0) | 2021.12.27 |
Servlet을 이용한 간단한 회원 저장/조회 구현 (0) | 2021.12.27 |
Java Servlet 정리본 _ HttpServletRequest (0) | 2021.12.24 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday