web.xml

web.xml

web.xml은 웹 애플리케이션의 사양을 명시하는 파일이다. 배포 시 war를 해석할 때 web.xml에 있는 내용을 기반으로 구동하게 된다. Spring 프로젝트에서는 DispatcherServlet과 설정 파일들을 이곳에 등록한다.

파일 전체 내용 보기

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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 https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

파일 상세 설명

xml 헤더

xml 문서임을 명시하는 xml 헤더 코드이다. 모든 xml 문서의 첫 번째 줄에 위치한다.

<?xml version="1.0" encoding="UTF-8"?>

기본 영역 설정

web.xml에 설정을 정의하기 위한 영역 선언이다.

<web-app version="2.5" 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 https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    ...(내용 작성)...
</web-app>

눈여겨봐야할 것은 기본적으로 생성하면 version이 2.5로 설정되어 있다는 것이다.

현재(2019/08) 기준 서블릿 최신 스펙은 4.0이므로 버전에 맞게 수정해야 한다. 단, 이 파일만 변경하는 것이 아니라 pom.xml에 존재하는 dependency도 수정해야 한다.

web.xml 버전별 스키마

Servlet 2.5

<?xml version="1.0" encoding="UTF-8"?>
<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">
</web-app>

Servlet 3.0

<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
    version="3.0">
</web-app>

Servlet 3.1

<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">
</web-app>

Servlet 4.0

<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
    version="4.0">
</web-app>

전역 설정 파일 선언

context-param을 통하여 전역 설정 파일을 선언한다.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

이 설정은 /WEB-INF/spring/에 있는 root-context.xml 파일이 전역 설정파일임을 명시하는 설정이며, param-name은 변경이 불가하다. 만약 설정 파일이 여러 개라면 param-value에 열거할 수 있다.

DispatcherServlet 설정

Spring의 핵심 처리 도구인 DispatcherServlet과 설정파일인 servlet-context.xml을 등록하는 코드이다.

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

servlet-name은 자유롭게 설정이 가능하지만 servlet, servlet-mapping에서 동일하게 작성되어야 연결이 된다. init-param 설정을 통해 설정파일(servlet-context.xml)의 위치를 알려주고 있으며, 양식은 root-context.xml과 동일하다. load-on-startup을 통해 시작 시 우선 순위를 부여한다.

url-pattern을 살펴보면 /로 설정된 것을 알 수 있다.

<url-pattern>/</url-pattern>

필터의 경우 일반적으로 /를 사용하는데, /와 /는 차이가 존재한다.

  • /*는 전체(All)을 의미한다. 설정을 통해서 특정 부분을 제외할 수 없다.

  • /는 나머지(Rest)를 의미한다. 설정을 통해서 특정 부분을 제외할 수 있다.

설정파일 연결 설정

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener 설정을 통해 전역 설정과 DispatcherServlet 설정을 이어지도록 한다. 이 설정으로 인하여 servlet-context.xml과 root-context.xml이 상하 관계로 연결된다.

  • servlet-context.xml 에서는 root-context.xml 에 등록된 내용을 사용할 수 있다.

  • root-context.xml 에서는 servlet-context.xml 에 등록된 내용을 사용할 수 없다.

Last updated