본문 바로가기
Backend/Servlet & JSP

[Servlet & JSP] 서블릿의 역할

by Forsaken Developer 2023. 5. 21.
728x90
728x90

서블릿의 역할

요청 받기

Http의 GET/POST 요청에 따른 header와 body에 대한 정보와 parameter로 전달 받은 데이터를 꺼내올 수 있다. 

@WebServlet("/headers")
public class RequestHeaderPrintServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Enumeration<String> headerNames = request.getHeaderNames();

		while (headerNames.hasMoreElements()) {
			System.out.println(headerNames.nextElement());
		}
		
		System.out.println(request.getHeader("accept"));
	}
}

 

요청 받은 헤더의 key값을 getHeaderNames를 통해서 Enumeration 타입으로 확인 할 수 있다.

또한 request 객체의 getHeader 메소드로 특정 key값의 헤더 value를 확인 할 수 있다.

헤더의 종류는 4가지로 분류 할 수 있다.

  • General Header : 요청 및 응답 모두에게 적용되며 body에 전송되는 것과는 관련이 없는 헤더
  • Request Header : fetch 리소스나 클라이언트에 대한 상세 정보를 포함하는 헤더
  • Response Header : 위치나 서버 자체의 응답과 관련된 정보를 포함하는 헤더
  • Entity Header : 컨텐츠 길이나 MIME 타입과 같은 엔티티 body에 대한 정보를 포함하는 헤더

응답 하기

문자열로 동적인 페이지를 만들어서 스트림을 통해 응답한다.

@WebServlet("/response")
public class ResponseTestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		StringBuilder responseBuilder = new StringBuilder();
		responseBuilder.append("<!doctype html>\n")
		               .append("<html>\n")
		               .append("<head>\n")
		               .append("</head>\n")
		               .append("<body>\n")
		               .append("<h1>서블릿 response</h1>")
		               .append("</body>\n")
		               .append("</html>\n");
		
	  //response.setContentType("text/html");
	  //response.setCharacterEncoding("UTF-8");
		
		response.setContentType("text/html;charset=UTF-8");
	  
	  PrintWriter out = response.getWriter();
	  out.print(responseBuilder);
	  out.flush();
	  out.close();
	}
}

StringBuilder를 통해서 HTML문서를 String으로 만들고 response 객체의 getWriter를 통해 스트림 형태로 내보낸다.

이때 setContentType으로 응답하려는 데이터 타입을 명시할 수 있다.

charset을 명시하지 않는다면 기본적으로 ISO-8859-1로 응답하기 때문에 한글이 깨지게 되므로  setCharacterEncoding으로 인코딩 타입을 명시한다.

setContentType을 통해서 하나의 문자열로 응답 데이터 타입과 인코딩 타입을 한 번에 지정할 수 있다.

@WebServlet("/status")
public class StatusCodeTestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendError(404,"페이지를 찾을 수 없습니다.");
	}
}

또한 response 헤더에 관련된 설정이 가능하고 응답 상태코드를 통해 응답을 내보낼 수 있다.

비즈니스 로직 처리

DB접속과 CRUD에 대한 로직 처리를 담당하게 되며 서블릿은 MVC에서 controller를 담당하고 있기때문에 서비스를 호출하는 방식으로 해결한다.

728x90
반응형

댓글