-
서블릿 HTTP 응답 데이터스프링/스프링 MVC 패턴 2023. 2. 10. 14:41
@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_BAD_REQUEST); // [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"); content(response); PrintWriter writer = response.getWriter(); writer.println("ok"); } }
HTTP 응답 데이터이다. 사용자가 요청을 하는 것이 아니라, 해당 url로 들어가면 개발자가 setHeader로 설정한 헤더를 통해 응답을 해주는 것이다.
setHeader 4줄이 있는데 첫 번째 줄은 기본 형식으로 데이터를 응답해주는 것이고, 2, 3번째 줄은 이전 데이터를 삭제하는 등 정보가 잘 유지되게 하는것이다.
4번째 response.setHeader("my-header", "hello");는 my-header라는 key값과 hello라는 value를 가진 Header를 내가 직접 만든 것이다. url에 들어가서 개발자 정보를 보게 된다면 위의 헤더들이 잘 응답하는 것을 확인할 수 있다.
쿠키와 리다이렉트
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"); }
쿠키를 만들거나 리다이렉트를 하는 방법이다.
여러 방법이 있지만 가장 좋은 방법은 쿠키는 쿠키 객체를 생성하고 생성값과 maxAge를 설정한 다음 response.addCookie(cookie)를 통해 쿠키를 넣어주는 것이다.
리다이렉트 해당 url로 리다이렉트할 수 있게 도와주는 것이다.
http:localhost:8080/response-header로 사이트를 들어가도 리다이렉트 해주는 코드가 있으면 바로 http:localhost:8080/basic/hello/-form.html로 넘어가게 된다.
응답 방법
1. 단순 텍스트 응답
2. HTML 응답
3. HTTP API - MessageBody JSON 응답
1. 단순 텍스트 응답
PrintWriter writer = response.getWriter(); writer.println("ok"); }
단순 텍스트로 응답하는 방법이다.
해당 웹 사이트에 들어가면 단순히 ok라는 메세지만 출력하게 된다.
위에 코드에 포함된 내용이라 나머지 코드는 생략했는데 Content-Type은 text/plain으로 지정해줘야 한다.
2. HTML 응답
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html") public class ResponseHtmlServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Content-Type: text/html;charset=utf-8 response.setContentType("text/html"); // html을 정상적으로 해주는 것 response.setCharacterEncoding("utf-8"); // 한글 안깨지게 도와주는 것 PrintWriter writer =response.getWriter(); writer.println("<html>"); writer.println("<body>"); writer.println(" <div>안녕?</div>"); writer.println("</body>"); writer.println("</html>"); } }
html 방식으로 웹 사이트에서 응답을 해주는 것이다.
writer.println안에 들어간 <html>, <body> 등은 웹 사이트에 표시하지 않아서 웹 사이트에 들어가보면 안녕?이라는 문자만 출력되어있다. 만약 특정 고객이 들어간다면 정적이 아니라 동적으로 사용할 수도 있다.
HTTP 응답으로 HTML을 반환할 때는 content-type을 무조건 text/html로 지정해줘야 한다.
3. HTTP API - MessageBody JSON 응답
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json") public class ResponseJsonServlet extends HttpServlet { private ObjectMapper objectMapper = new ObjectMapper(); // json 방식으로 변경하기 위해 꼭 필요함 @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Content-Type: application/json response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); HelloData helloData = new HelloData(); // HelloData는 따로 만든 클래스(username, age의 객체) helloData.setUsername("kim"); helloData.setAge(20); //{"username": "kim", "age": 20} 으로 변경 String result = objectMapper.writeValueAsString(helloData); response.getWriter().write(result); } }
json 방식으로 웹 사이트에서 응답을 할 수 있다.
아주 간단한 예제지만 username과 age를 설정하면 웹 페이지에서 json방식으로 응답해준다.
{"username":"kim","age":20}
웹 사이트에 출력되는 것은 위와 같다.
'스프링 > 스프링 MVC 패턴' 카테고리의 다른 글
JSP를 이용한 회원가입 (0) 2023.02.10 서블릿을 이용한 회원가입 만들기 (0) 2023.02.10 서블릿 HTTP 요청 데이터 (0) 2023.02.10 HTML, HTTP API, CSR, SSR (0) 2023.02.07 동시 요청 - 멀티 쓰레드 (쓰레드 풀) (0) 2023.02.07