게으른 개발자의 끄적거림

web.xml이란? web.xml 구성 요소

끄적잉 2024. 6. 18. 21:25
반응형

### Web.xml에 대한 자세한 설명

**web.xml**은 Java 웹 애플리케이션의 배포 설명자(deployment descriptor) 파일로, 애플리케이션의 구성(configuration) 정보를 담고 있습니다. 이 파일은 `WEB-INF` 디렉토리에 위치하며, 서블릿 컨테이너가 애플리케이션을 배포할 때 이 파일을 참조하여 애플리케이션을 설정합니다. `web.xml` 파일을 통해 서블릿, 필터, 리스너 등을 설정하고, URL 매핑, 초기화 파라미터, 보안 설정 등을 정의할 수 있습니다.

 


### 주요 구성 요소

`web.xml` 파일의 주요 구성 요소는 다음과 같습니다:

1. **<servlet>** 및 **<servlet-mapping>**
   - 서블릿을 정의하고 URL 패턴을 매핑합니다.

2. **<filter>** 및 **<filter-mapping>**
   - 필터를 정의하고 URL 패턴 또는 서블릿에 매핑합니다.

3. **<listener>**
   - 애플리케이션 이벤트를 처리하기 위한 리스너를 정의합니다.

4. **<context-param>**
   - 애플리케이션 전역에서 사용할 수 있는 초기화 파라미터를 정의합니다.

5. **<init-param>**
   - 특정 서블릿이나 필터에 대한 초기화 파라미터를 정의합니다.

6. **<welcome-file-list>**
   - 디렉토리 요청 시 기본적으로 제공할 파일을 정의합니다.

7. **<error-page>**
   - 특정 오류 코드나 예외에 대한 사용자 정의 에러 페이지를 정의합니다.

8. **<security-constraint>**
   - 애플리케이션의 보안 제약을 정의합니다.

9. **<session-config>**
   - 세션 구성 요소를 정의합니다.

 

 


### 예시를 통한 구체적인 설명

다음은 각 구성 요소를 포함한 예시 `web.xml` 파일입니다:


```xml
<?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_3_1.xsd"
         version="3.1">


    <!-- Servlet 정의 -->
    <servlet>
        <servlet-name>exampleServlet</servlet-name>
        <servlet-class>com.example.ExampleServlet</servlet-class>
        <!-- Servlet 초기화 파라미터 -->
        <init-param>
            <param-name>exampleParam</param-name>
            <param-value>paramValue</param-value>
        </init-param>
    </servlet>

 

반응형


    <!-- Servlet 매핑 -->
    <servlet-mapping>
        <servlet-name>exampleServlet</servlet-name>
        <url-pattern>/example</url-pattern>
    </servlet-mapping>

    <!-- Filter 정의 -->
    <filter>
        <filter-name>exampleFilter</filter-name>
        <filter-class>com.example.ExampleFilter</filter-class>
    </filter>

    <!-- Filter 매핑 -->
    <filter-mapping>
        <filter-name>exampleFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Listener 정의 -->
    <listener>
        <listener-class>com.example.ExampleListener</listener-class>
    </listener>

    <!-- Context Parameter 정의 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/applicationContext.xml</param-value>
    </context-param>

    <!-- Welcome File List 정의 -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!-- Error Page 정의 -->
    <error-page>
        <error-code>404</error-code>
        <location>/error/404.html</location>
    </error-page>

    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/error/defaultError.html</location>
    </error-page>

    <!-- Security Constraint 정의 -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Protected Area</web-resource-name>
            <url-pattern>/secure/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>USER</role-name>
        </auth-constraint>
    </security-constraint>

    <!-- Session Configuration 정의 -->
    <session-config>
        <session-timeout>30</session-timeout> <!-- 세션 타임아웃을 30분으로 설정 -->
    </session-config>

</web-app>
```

 


### 구성 요소 상세 설명

 


#### 1. `<servlet>` 및 `<servlet-mapping>`

서블릿을 정의하고 이를 특정 URL 패턴에 매핑합니다.

```xml
<servlet>
    <servlet-name>exampleServlet</servlet-name>
    <servlet-class>com.example.ExampleServlet</servlet-class>
    <init-param>
        <param-name>exampleParam</param-name>
        <param-value>paramValue</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>exampleServlet</servlet-name>
    <url-pattern>/example</url-pattern>
</servlet-mapping>
```

여기서 `exampleServlet`은 `com.example.ExampleServlet` 클래스를 나타내며, `/example` 경로로 오는 요청을 이 서블릿이 처리하게 됩니다. `<init-param>`을 사용하여 서블릿 초기화 시 필요한 파라미터를 설정할 수 있습니다.

 


#### 2. `<filter>` 및 `<filter-mapping>`

필터를 정의하고 이를 특정 URL 패턴 또는 서블릿에 매핑합니다.

```xml
<filter>
    <filter-name>exampleFilter</filter-name>
    <filter-class>com.example.ExampleFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>exampleFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
```

여기서 `exampleFilter`는 `com.example.ExampleFilter` 클래스를 나타내며, 모든 경로(`/*`)로 오는 요청에 대해 이 필터가 적용됩니다.

 


#### 3. `<listener>`

리스너를 정의하여 특정 애플리케이션 이벤트를 처리합니다.

```xml
<listener>
    <listener-class>com.example.ExampleListener</listener-class>
</listener>
```

여기서 `ExampleListener`는 `ServletContextListener`와 같은 인터페이스를 구현하여 애플리케이션 시작 및 종료 이벤트를 처리할 수 있습니다.

 


#### 4. `<context-param>`

애플리케이션 전역에서 사용할 수 있는 초기화 파라미터를 정의합니다.

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

이 설정은 Spring 등의 프레임워크에서 애플리케이션 컨텍스트 파일의 위치를 지정할 때 유용합니다.

 


#### 5. `<init-param>`

특정 서블릿이나 필터에 대한 초기화 파라미터를 정의합니다.

```xml
<init-param>
    <param-name>exampleParam</param-name>
    <param-value>paramValue</param-value>
</init-param>
```

위 예시에서는 서블릿 초기화 시 `exampleParam` 이름의 파라미터에 `paramValue` 값을 설정합니다.

 


#### 6. `<welcome-file-list>`

디렉토리 요청 시 기본적으로 제공할 파일을 정의합니다.

```xml
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
```

클라이언트가 디렉토리를 요청했을 때, `index.html` 또는 `index.jsp` 파일을 응답으로 제공합니다.

 

 


#### 7. `<error-page>`

특정 오류 코드나 예외에 대한 사용자 정의 에러 페이지를 정의합니다.

```xml
<error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
</error-page>

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error/defaultError.html</location>
</error-page>
```

404 오류가 발생하면 `/error/404.html` 페이지를, 예외가 발생하면 `/error/defaultError.html` 페이지를 응답으로 제공합니다.

 

 


#### 8. `<security-constraint>`

애플리케이션의 보안 제약을 정의합니다.

```xml
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>USER</role-name>
    </auth-constraint>
</security-constraint>
```

여기서는 `/secure/*` 경로에 대한 요청은 `USER` 역할을 가진 사용자만 접근할 수 있도록 설정합니다.

 


#### 9. `<session-config>`

세션 구성 요소를 정의합니다.

```xml
<session-config>
    <session-timeout>30</session-timeout>
</session

-config>
```

세션 타임아웃을 30분으로 설정합니다.

### 결론

`web.xml` 파일은 Java 웹 애플리케이션에서 중요한 역할을 하며, 서블릿, 필터, 리스너 등의 설정과 URL 매핑, 초기화 파라미터, 보안 설정 등을 정의합니다. 이를 통해 개발자는 애플리케이션의 동작 방식을 세밀하게 조정할 수 있습니다. 위의 예시를 통해 `web.xml` 파일의 각 구성 요소와 그 사용 방법을 이해할 수 있습니다. 이를 바탕으로 자신의 애플리케이션에 맞는 `web.xml` 파일을 작성하여 효과적인 애플리케이션 구성을 할 수 있습니다.

반응형