[MVC1] 2. 서블릿

kiwonkim·2021년 7월 12일
0
post-thumbnail

HttpServletRequest, HttpServletResponse

HTTP 요청 메시지를 파싱 후 정보를 꺼내야 하는데, WAS는 번거로움을 방지하기 위해 미리 요청 메시지의 정보를 꺼내어 HttpServletRequest 객체에 저장해준다.

마찬가지로 응답을 위해 HTTP 응답 메시지에 일일이 기록해야하는데. 이 또한 WAS가 HttpServletResponse 객체로 미리 생성해준다.

서블릿의 비즈니스 로직을 구현할때는
편리하게 request 객체에서 요청 정보를 꺼내고, response 객체로 응답을 수행하면 된다.


요청시 데이터 전송 : 클라이언트 -> 서버

1.GET - 쿼리 파라미터

  • url의 쿼리파라미터에 정보를 담아 전송하는 방식
  • 요청시 사용하는 메서드인 GET에 조건을 추가하기 위해 사용한다.
  • 서블릿은 request.getParameter 로 값을 꺼내 사용할 수 있다.
  • 데이터는 헤더에 담겨 전송되므로 요청 바디의 타입을 명시하는 필드인 content-type 값은 없다.
//url : http:localhost:8080/example?name=kim&age=20

@WebServlet(name = "example", urlPatterns = "/example")
public class Example extends HttpServlet {
	@Override
    protected void service(HttpServletRequest request, 
    					HttpServletResponse response) {
    System.out.println("이름 = " + request.getParameter("name");
    System.out.println("나이 = " + request.getParameter("age");
    }
    
}

2. POST - HTML Form

  • HTML의 Form을 사용해 값을 입력하는 방식
  • 리소스의 내용을 변경하는 POST로 회원가입, 상품주문 등에 사용된다.
  • 서블릿은 request.getParameter로 값을 꺼내 사용할 수 있다.
  • 데이터는 바디에 담겨 전송되고 content-type은 application/x-www-form-urlencoded 이다.
<html>
<head> ~~~ </head>
<body>
    <form action = "/example" method = "post"> 
    name : <input type = "text" name = "name" />
    age : <input type = "text" name = "age" />
    <button type = "submit">전송</button>
    </form>
</body>

3. HTTP API

  • 요청 HTTP 메시지 바디에 Text 나 JSON을 직접 담아 전송하는 방식
  • {"이름" : "값"} 의 JSON 방식을 가장 많이 활용한다.
  • 서블릿은 JSON을 잭슨 라이브러리를 통해 객체로 변경하여 사용한다.

요청 시 전송 데이터는 쿼리 파라미터, HTML Form, HTTP API 방식이 있다. 쿼리파라미터는 헤더에 Form은 바디에 데이터가 담기며 수신 시에는 getParameter 로 값을 가져온다. JSON은 잭슨 라이브러리로 파싱해 사용한다.



응답시 데이터 전송 : 서버 -> 클라이언트

1. HTML 응답

  • HTML 형태로 일일이 body에 담아 응답.
  • contentType은 text/html로
  • HTML 파일을 수동으로 작성해야함
	protected void service() {
    	response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        
        PrintWriter writer = reponse.getWriter();
        writer.println("<html>");
        writer.println("<body>");
        writer.println(" <div>안녕</div>");
        writer.println("</body>");
        writer.println("</html>");
    }

2. API JSON 응답

  • 객체를 잭슨 라이브러리로 JSON 문자열로 변환해 응답
  • contentType은 application/json으로
	private ObjectMapper objectMapper = new ObjectMapper();
    
	protected void service() {
    	HelloData data = new HelloData();
        data.setName("kim");
        data.setAge(20);
        String result = objectMapper.writeValueAsString(data);
        response.getWriter().write(result);
    }

서버의 응답 전송 형식은 HTML 이나 JSON 을 사용한다. HTML을 주로 사용하는데 자바코드에서 일일이 응답 body에 HTML을 입력해야해서 매우 불편하다. 응답할 때 HTML 형식을 그대로 전송할 수 없을까? -> JSP를 사용하는 MVC 패턴의 등장



본 글은 김영한님의 "스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술" 강의내용 및 이해한 내용을 정리한 것입니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

0개의 댓글

관련 채용 정보