본문 바로가기

Java/서블릿

[Java] [Servlet] web.xml의 모든 것 (1)

ServletContainer는 web.xml에 기술되어있는 내용을 바탕으로 ServletContainer를 초기화 하게 됩니다.

 

따라서,

첫번째로는 ServletContainer에 Servlet 등록을 위해 사용합니다.

두번째로는 Spring이 제공하는 Spring IoC Container를 사용한다는 것을 명시하기 위해 사용합니다.

 

1. Servlet 등록하기

첫번째로, 서블릿을 서블릿 컨테이너에 등록하는 경우 사용합니다.

서블릿을 서블릿 컨테이너에 등록하고, URL과 매핑을 시켜주어야 하는데, 이것을 진행하는 곳입니다.

요즘은, 어노테이션으로 가능하지만, web.xml 설정 파일로 하는 것이 기본임을 알자.

 

  1. 서블릿 클래스를 등록하기
    • 서블릿을 참조할 때 사용할 이름
    • 등록할 서블릿 클래스의 Full Name
  2. 서블릿을 URL과 매핑하기
    • 어떤 URL로 요청이 들어왔을 때, 어떤 서블릿에 가도록 할 것인지 작성해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">
 
     <servlet> //서블릿 클래스를 서블릿으로 등록
           <servlet-name>myServlet</servlet-name> //해당 서블릿을 참조할 때 사용할 이름
           <servlet-class>controller.MyServlet</servlet-class> //서블릿으로 사용할 서블릿 클래스의 FullName
     </servlet>
 
     <servlet-mapping>
           <servlet-name>myServlet</servlet-name> //매핑할 서블릿의 이름
           <url-pattern>/myServlet</url-pattern> //매핑할 URL 패턴
     </servlet-mapping>
 
</web-app>

 

2. Spring IoC Container 사용 선언하기

 

<servlet>
	<!-- contextLoader가 해당 위치의 설정 파일을 읽어, 해당 파일을 dispatcher servlet으로 만든다. -->
    <init-param>
      <param-name>contextClass</param-name>
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </init-param>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>org.example.guestbookupgrade.config.WebMvcContextConfiguration</param-value>
  </servlet>

 

ContextLoaderListener

Servlet의 라이프사이클에 맞추어 ApplicationContext를 ServletContext에 추가/삭제하도록 합니다.

ServletContext가 초기화 되는 시점에, ApplicationContext를 만들어주는 역할을 합니다.

 

ContextLoader

실질적으로 ApplicationContext를 생성하고 ServletContext에 setting합니다. 이를 위해서는, ApplicationContext의 type과, ApplicationContext가 사용할 Configuration 파일이 필요합니다. 이 두 가지를, contextClass,contextConfigLocation이라는 parameter로 전달받게 되기 때문에, 위와 같이 web.xml 파일에 해당 param에 대한 value를 적어줍니다.

 

contextClass

SpringContainer를 만들때, 어떤 type의 ApplicationContext(Container)로 만들 것인지 지정하는 파라미터입니다.

 

contextConfigLocation

SpringContainer를 만들 때, 어떤 설정 파일을 참조할 것인지 지정하는 파라미터입니다.

 

 

web.xml의 태그

  • <context-param>
    • 같은 Web Application에 있는 Servlet들이 같이 공유해서 사용할 수 있는 전역변수
    • param-name : context-param의 이름
    • param-value : context-value의 값
  <context-param>
    <param-name>contextClass</param-name>
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext
    </param-value>
  </context-param>

 

  • <serlvet> 하위 태그
    • <init-param>
      • context-param과 같은 의미인데, 범위가 다르다.
      • context-param은 Web Application 안에 있는 Servlet끼리 사용하는데 반해, init-param은 Servlet내에서 지역변수처럼 사용되는 param이다.
 <!--DispatcherServlet을 FrontController로 설정(url-mapping을 '/'로 지정함)하고, 어떤 설정 파일을 읽어들일지 정하는 부분 -->
  <servlet>
    <servlet-name>mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <!-- contextLoader가 해당 위치의 설정 파일을 읽어, 해당 파일을 dispatcher servlet으로 만든다. -->
      <param-name>contextClass</param-name>
      <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext
      </param-value>
    </init-param>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>org.example.guestbookupgrade.config.WebMvcContextConfiguration
      </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

'Java > 서블릿' 카테고리의 다른 글

[Java] [Servlet] Servlet의 생명 주기  (0) 2022.09.16
[Java] [Servlet] Servlet이란?  (0) 2022.09.15