Servlet & JSP

1. Servlet

  • Java언어로 작성된 Server측 프로그램으로, 클라이언트의 요청 내용을 처리하는 비지니스 로직을 포함하고 있다.

  • 비지니스 로직의 처리 결과로 동적인 응답데이터(HTML, JSON 등)를 생성하는 역할을 한다.

  • 즉, 자바를 사용하여 웹서비스를 만들기 위해 필요한 기술이며 쉽게 생각하면 java를 활용하여 html을 생성하는 기술이라고 생각하면 된다.

  • Apache Tomact과 같은 WAS의 Servlet Container에 Context별 Servlet들이 생성되며 실행된다.

1) Apache Tomcat의 Servlet Container의 구조

  • Servlet Container에는 여러개의 어플리케이션(Context)이 존재하며, 각 어플리케이션 내부에는 여러개의 Servlet들이 존재한다.

  • 각 Servlet은 클라이언트의 요청이 있을 때 최초 1회 생성된다.

  • 만약 http://localhost:8080/myapp/hello 와 같은 url로 요청이 들어오는 경우, 먼저 요청 URL중 Context Path( /myapp)를 먼저 분해한 후 적절한 Context를 찾아가고 , 그 후 /hello url과 매핑되는 Servlet을 찾아 요청 내용을 서비스한다.

  • Context의 정보는 server.xml의 정보를 참조하고, Servlet은 각 Context의 web.xml을 참조한다.

2) Servlet의 Life Cycle

  • 서블릿은 다음과 같은 과정을 거쳐 생성되고 소멸된다.

1. 초기화 initialize(init())

  • 클라이언트가 요청한 서블릿이 최초 요청에 해당하는 서블릿인 경우 init()메서드를 통해 Servlet이 생성된다.

  • 요청한 서블릿이 이미 생성된 경우 예전에 생성해둔 서블릿을 반환한다.

  • 각 서블릿은 최초 요청시 1회 생성되며, 이후에는 생성된 서블릿을 재사용한다.(싱글톤패턴)

  • 여러 스레드에서 동시에 요청이 발생하는 경우에도 항상 1개의 서블릿을 공유하여 사용한다.

2. 요청처리 service()

  • 클라이언트의 매 요청마다 실행되는 메서드로, 요청 방식(method)에 따라 doGet 혹은 doPost메서드를 실행한다.

3. 소멸 destory

  • 서블릿이 서버에서 소멸될 때 실행되는 메서드

  • 서버종료, class파일의 수정 시 발생한다.

3) web.xml

  • 배포서술자(deployment descriptor)로 불리는 파일로, 웹 어플리케이션(Context)의 설정정보를 xml형식으로 기술해 놓은 파일이다.

  • Servlet, JSP, Filter 등을 등록하며 URL 매핑 정보들을 담고 있어 서블릿 컨테이너가 Context를 어떻게 구동할지 정의한다.

  • web.xml에 등록한 Servlet은 톰캣 구동시 매핑정보가 등록된다.

  • web.xml예시 )

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!-- 어플리케이션이름-->
    <display-name>My Web App</display-name>

    <!-- 1. 서블릿 등록 -->
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.kh.servlet.HelloServlet</servlet-class>
    </servlet>

    <!-- 2. 서블릿 매핑 -->
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    <!--  그외,  welcome-file-list, filter, wrapper등선언가능 -->

</web-app>

4) web.xml 설정정보

5) HttpServletRequest / HttpServletResponse

  • Servlet에서 Http요청 및 응답을 처리하기 위해 사용하는 객체

  • 클라이언트의 요청내용은 HttpServletRequest에 담겨 Servlet에게 전달된다.

  • Servlet은 처리 결과를 HttpServletResponse를 통해 사용자에게 응답한다.

  1. HttpServletRequest의 메서드들

  1. HttpServletResponse의 메서드들

2. JSP(Java Server Page)

  • Java를 활용하여 Server에서 동적인 HTML Page를 생성할 수 있는 기술.

  • 순수 Servlet으로 동적 HTML을 구현해야하는 어려움을 해결할 수 있으며, WAS에 의해 Class파일로 변환되어 실행된다.

  • Servlet은 클라이언트의 요청처리와 데이터 가공등 백엔드의 비지니스 로직(Controller)을 담당하고, JSP는 가공된 데이터를 바탕으로 응답화면(View)을 생성하는 프런트의 역할을 담당한다.

1) Apache Tomcat의 JSP 실행 방식

  • 사용자가 .jsp파일을 요구시 Tomcat 내부의 Jasper에게 jsp파일 컴파일을 명령

  • Jasper는 jsp파일을 Servlet형태의 java파일로 변환

  • Servlet형태의 java파일을 class파일로 변환 후 Servlet처럼 실행.

    • doGet방식으로 html을 생성 및 응답하는 구조

2) JSP Elements

3) JSP 내장 객체

Last updated