• 웹 서버는 정적인 페이지를 서비스한다.
  • 웹 서버는 두 가지를 못한다.
    • 동적인 컨텐츠 생성
    • 서버 상에서 데이터를 저장

위의 문제들 때문에 Servlet 이 등장하였다.

 

Servlet 의 등장

  • 동적인 컨텐츠를 삽입할 수 있다.
  • 서블릿은 자바 코드 내에 HTML 내용을 삽입할 수 있다.
public class DemoServlet extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html; charset=UTF-8");

        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("</head>");
        out.println("<body>");
        out.println("<p>Demo Servlet</p>");
        out.println("</body>");
        out.println("</html>");

    }
}
<servlet>
	<servlet-name>DemoServlet</servlet-name>
	<servlet-class>sample.DemoServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>DemoServlet</servlet-name>
	<url-pattern>/demo-servlet</url-pattern>
</servlet-mapping>
  • 클라이언트의 요청에 따라 doGet() 메소드가 실행되고, 이에 따라 브라우저 화면은 렌더링되면서 사용자에게 HTML 화면이 보여지게 된다.
  • 위의 구문으로 서블릿을 작성하면 상당히 많은 양의 HTML 코드를 서블릿 단에서 적어야한다. 이는 결과적으로 수많은 리소스가 낭비된다.
  • 해당 내용은 web.xml 에 설정해두어야 한다.
    • 서블릿 이름과 어느 패키지에 속하였는지 명시
    • 서블릿 이름과 해당 서블릿과 매핑할 URL 패턴을 명시

결과적으로 많은 리소스의 낭비로 인해서 JSP 가 등장하였다.

 

서블릿은 도움을 필요로 한다. (서블릿은 누군가의 도움이 필요하다.)

 

클라이언트로 요청이 들어온다면,

  1. 요청을 처리할 스레드를 만든다.
  2. 서블릿의 doPost() / doGet() 메소드를 호출한다.
  3. 두 메소드의 인자로 들어가는 하위 객체를 생성하고 서블릿으로 넘겨준다.
    1. HttpServletRequest
    2. HttpServletResponse
  4. 서블릿의 라이프 사이클을 관리한다.

서블릿에게 이러한 도움을 주는 개체는 컨테이너라 부르는 자바 애플리케이션이다.

 

reference

헤드퍼스트 디자인 패턴 : Servlet & JSP

Posted by doubler
,