### 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` 파일을 작성하여 효과적인 애플리케이션 구성을 할 수 있습니다.
'게으른 개발자의 끄적거림' 카테고리의 다른 글
소켓(SOCKET)통신 이란? (0) | 2024.06.19 |
---|---|
Dispatcher Servlet(디스패처 서블릿) 완벽 정복 (0) | 2024.06.18 |
Java 서블릿이란? (feat. 서블릿 컨테이너) (0) | 2024.06.17 |
HTTP 405error란? (해결 방법) (0) | 2024.06.13 |
HTTP 406 error 해결방법 (0) | 2024.06.12 |