본문 바로가기

Dev/Spring Boot

Servlet - HttpServlet 사용법 (Request , Response)

728x90

Servlet : 동적 웹 페이지를 만들 때 사용되는 Java 프로그래밍 기술. 서블릿은 웹 요청과 응답의 흐름을 간단한 메소드 호출로 가능하게 해준다.

 

만약 서블릿이 없다면 개발자들은 HTTP 스펙을 모두 알고있어야하고 순수 HTTP 상태나 response, request를 파싱하고 해석해야할 것이다. 서블릿이 이것을 대신해준다.

 

1. Request

 

클라이언트가 서버에 요청을 보낼 때가 있다. 가장 일반적으론 GET요청 등이 있을 것이다.

1. 이 때 쿼리파라미터를 통해 유저아이디나 이름을 보낼수가 있고

2. HTML 폼을 통해 POST로 요청한다. 웹 브라우저가 만들어서 보내는데 쿼리 파라미터로 넘어가는 것과 같다.

3. POST를 통해 바디에 담아서 간다. 보통 json으로 날아온다.

 

2. Response

 

클라이언트에게 서버는 여러가지 정보를 넣어서 응답할수가있다. 쿠키, 헤더, 응답코드 등을 설정할 수 있다. 그리고 HTML, JSON, 평문도 담아서 보내는 것이 가능하다.

 

1. 쿠키, 헤더, 응답코드, 리다이렉트 설정

@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setStatus(HttpServletResponse.SC_OK);
        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");
        cookies(response);
        PrintWriter printWriter = response.getWriter();

        printWriter.println("OK");
        redirect(response);
    }
	// 쿠키 설정
    private void cookies(HttpServletResponse response){
        Cookie cookie = new Cookie("myCookie", "GOOD");
        cookie.setMaxAge(60);
        response.addCookie(cookie);
    }
	// 리다이렉트
    private void redirect(HttpServletResponse response) throws IOException {
        //response.setStatus(HttpServletResponse.SC_FOUND);
        response.sendRedirect("/basic/hello-form.html");
    }
}

 

개발자 도구에서 설정한 헤더와 쿠키 등이 모두 잘 설정된 것을 확인할 수 있다.
먼저 302스테이터스가 발생하고 리다이렉션 설정해둔 곳으로 이동했다.

 

2. HTML을 클라이언트에 전달

@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 printWriter = response.getWriter();
        printWriter.println("<html>");
        printWriter.println("<body>");
        printWriter.println("  <div>안녕하세요.</div> ");
        printWriter.println("</html>");
        printWriter.println("</body>");
    }
}

 

작성한 HTML을 화면에 출력시켜주는 모습이다. 동적으로도 설정가능하다.

 

3. Json 정보로 보내기

@WebServlet(name = "responseJsonServlet", urlPatterns = "/responseJson")
public class ResponseJsonServlet extends HttpServlet {
    private 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("홍길동");
        helloData.setAge(20);

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

 

json을 클라이언트에 전달

 

기본기가 부족하다는 생각이 들어 서블릿부터 착실히 공부중이다. 다음으로 이제 Spring MVC로 들어가는데 확실히 원천기술의 스택을 보다보니 도움이되는 것 같다.