[Spring MVC] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술(2)

 

HttpServletResponse - 기본 사용법

 

HttpServletResponese 역할

 

" Http 응답 메시지 생성"

 - Http 응답코드 지정

 - 헤더생성

 - 바디생성

 

"편의 기능 제공"

 - Content-type , 쿠키, Redirect

 

ResponseHeaderServlet

응답의 헤더에 들어가는 값 관련해서 확인

Cookie 객체를 통해서 myCookie 를 설정할 수 있다.

@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);

        // [Header-line]
        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);

        // [Messaage Body]
        PrintWriter writer = response.getWriter();
        writer.println("ok");

    }

    private void content(HttpServletResponse response){
        // Content-Type : text/plain; charset=utf-8
        // Content-Length : 2

        response.setContentType("text/plain;charset=utf-8");
        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")

        Cookie cookie =  new Cookie("myCookie", "good");
        cookie.setMaxAge(600);
        response.addCookie(cookie);
    }

    private void redirect(HttpServletResponse response) throws IOException {
        // Status 302
        // location : /basic/hello-form.html

        //response.setStatus(HttpServletResponse.SC_OK);
        //response.setHeader("Location", "/basic/hello/form.html");
        response.sendRedirect("/basic/hello-form.html");
    }
}

 

 

HTTP 응답데이터 - 단순 텍스트, HTML

 

HTTP 응답 메시지는 주로 다음 내용을 전달

 : 단순 텍스트 응답 - > PrintWriter

 : HTML 응답

 : HTML API - Message Body 응답

 

ResponseHtmlServlet

: Content Type - "text/html" 로 지정함

: PrintWriter 로 HTML 문법을 작성하게 되면, 응답 결과로 HTML로 리턴되면서 

  작성한 HTML 구문이 보인다.

package hello.servlet.basic.response;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@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> HTML 테스트 </div>");
        writer.println("</body>");
        writer.println("</html>");
    }
}

 

 

 

JSON

HTTP 응답으로 JSON 시 application/json 으로 지정

* application/json 은 UTF-8이 기본으로 되어 있어서 별도로 지정 필요 없음

import com.fasterxml.jackson.databind.ObjectMapper;
import hello.servlet.basic.HelloData;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet  extends HttpServlet {

    private ObjectMapper objectMapper = new ObjectMapper();

    @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.setUsername("kim");
        helloData.setAge(20);

        String result = objectMapper.writeValueAsString(helloData);
        response.getWriter().write(result);
    }
}

 

 

서블릿 정리

 

1. 서블릿 프로젝트 생성

2. Hello 서블릿 생성

3. HttpServletRequest 

   : Header, 요청을 편리하게 생성

4. Http 요청데이터

   : 주로 3가지 GET(쿼리파라미터), POST - HTML Form , HTTP message body(JSON, TEXT, XML 등)

   : request.getParameter 를 통해 GET, POST 파라미터 값을 읽을 수 있음.

   : HTTP MESSAGE BODY 의 경우, 주로 JSON을 사용

5. HttpServletResponse