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를 통해 사용자에게 응답한다.
HttpServletRequest의 메서드들

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