들어가기 전에
- Servlet이 생긴 배경
초기 웹 서비스에는 클라이언트에게 정적인 페이지만 제공하다가 웹이 발전하면서 사용자마자 요청을 다르게 처리해야했습니다.
이때 Web Application Server라는 동적 컨텐츠를 제공해주는 서버가 생겨 클라이언트의 요청을 다양하게 처리할 수 있게 되었습니다. 여기서 WAS내에 동적 컨텐츠를 생성하는데 사용되는 기술 또는 객체가 Servlet입니다.
Servlet이란?
동적 컨텐츠를 만드는 데에 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술 혹은 그 기술에서 사용되는 객체
public interface Servlet{
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
}
serveice() 메서드로 ServletRequest를 비즈니스 로직으로 처리해서 HttpServletResponse 객체에 응답을 보냅니다.
어떤 프로토콜의 어떤 Servlet을 사용하는지?
Http를 사용한 요청과 응답을 다루는 프로토콜을 사용하는 경우에는 HttpServlet을 이용합니다.
Httpservlet은 GenericServlet을 상속하고 GenericServletdms Servlet을 구현합니다.
public abstract class HttpServlet extends GenericServlet
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable
public interface Servlet
서블릿의 동작
- 사용자가 URL을 클릭하면 HTTP Request를 서블릿 컨테이너로 전송한다
- HTTP Request를 전달받은 서블릿 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
- web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청을 한 것인지 찾는다
- 해당 서블릿에서 service 메소드를 호출한 후 클라이언트의 요청종류 (GET, POST)에 따라 doGet 혹은 doPost를 호출한다.
- doGet, doPost 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다
WAS에서 해당 servlet을 어떻게 찾을까?
이전에는 web.xml에 servlet을 등록했다
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<listener>
<listener-class>com.baeldung.servlets3.web.listeners.RequestListener</listener-class>
</listener>
<servlet>
<servlet-name>uppercaseServlet</servlet-name>
<servlet-class>com.baeldung.servlets3.web.servlets.UppercaseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uppercaseServlet</servlet-name>
<url-pattern>/uppercase</url-pattern>
</servlet-mapping>
<filter>
<filter-name>emptyParamFilter</filter-name>
<filter-class>com.baeldung.servlets3.web.filters.EmptyParamFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>emptyParamFilter</filter-name>
<url-pattern>/uppercase</url-pattern>
</filter-mapping>
</web-app>
참고
web.xml은 클라이언트의 요청을 처리할 인코딩 필터와 Dispatcher Servelt을 생성하고, view Resolver를 web application context 단위로 설정하였다.
ViewResolver는 클라이언트에게 보여줄 객체를 찾는 일을 한다.
Spring Boot에서는 application.porperties 혹은 application.yml 에서 설정하거나
Auto-Configuration, Spring Container 대체, 빈 설정 등으로 간편하게 사용할 수 있다.
Reference 및 참고
https://ehdvudee.tistory.com/47
https://www.youtube.com/watch?v=3gmOuUWPZV4&ab_channel=우아한테크
https://tlatmsrud.tistory.com/35
'CS 공부' 카테고리의 다른 글
웹 서버(Web Server)와 웹 애플리케이션 서버(WAS) (0) | 2024.02.22 |
---|---|
[트랜잭션] 트랜잭션의 격리 수준 4단계 (0) | 2023.01.14 |