WEB.XML Config (context-param, init-param, web-app ... )
1. 컨텍스트 초기화 파라미터(<context-param>)
- context-param은 init-param 그 이상으로 전역 즉 모든 서블릿에서 사용할 수 있는 파라미터 값이다.
- <web-app>항목내에 작성
- 예) DD상에 작성방법
<web-app ...>
<context-param>
<param-name>paraname</param-name>
<param-value>paravalue</param-value>
</context-param>
</web-app>
- 서블릿 상에서 호출시
: getServletContext().getInitParameter("paraname");
- 범위
: 웹 애플리케이션에 존재하는 어떤 서블릿이나 jsp모두
2. 서블릿 초기화 파라미터(<init-param>)
-해당 파라미터 값은 지정해준 서블릿 내에서만 쓸 수 있는 값이다.
- <servlet>항목 안에 작성
- 예) DD상에 작성방법
<servlet>
<servlet-name>servletname</servlet-name>
<servlet-class>servletclass</servlet-class>
<init-param>
<param-name>paraname</param-name>
<param-value>paravalue</param-value>
</init-param>
</servlet>
- 서블릿 상에서 호출시
getServletConfig().getInitParameter("foo");
- 범위
<init-param>항목을 표함하고 있는 서블릿만
3. web-app 요소
web.xml 파일의 최상위 요소는 <web-app>입니다. 이 요소는 웹 애플리케이션에 대한 전반적인 설정을 포함합니다.
01. 톰캣 버젼 9.0, 10.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>
서블릿스펙 | 톰캣버전 | 최소자바버젼 | jsp스펙 | 비고 |
5.0 | 10.0 | 8이상 | 3.0 | 01 |
4.0 | 9.0 | 8이상 | 2.3 | 01 |
주요 특징:
- HTTP/2 지원: 서블릿 4.0은 HTTP/2를 지원합니다. HTTP/2는 HTTP/1.1의 한계점을 극복하며 성능을 개선하기 위한 여러 기능을 제공합니다.
- 멀티플렉싱: 하나의 연결에서 여러 요청/응답을 처리할 수 있어 지연 시간을 줄이고, 대역폭을 효율적으로 사용할 수 있습니다.
- 헤더 압축: HTTP/2는 헤더 압축을 통해 대역폭을 절약합니다.
- 서블릿 컨테이너의 비동기 처리 개선: 서블릿 3.0에서 도입된 비동기 처리가 더욱 향상되었습니다.
- 웹 애플리케이션에서의 성능 최적화 및 향상:
- HTTP/2를 통해 웹 애플리케이션의 성능을 크게 개선할 수 있으며, 특히 대용량 웹 애플리케이션에서 효과적입니다.
02. 톰캣 버젼 8.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_3_1.xsd"
version="3.1">
</web-app>
서블릿스펙 | 톰캣버전 | 최소자바버젼 | jsp스펙 | 비고 |
3.1 | 8.5 | 7이상 | 2.3 | 02 |
3.1 | 8.0 | 7이상 | 2.3 | 02 |
주요 특징:
- Servlet 3.0의 기능 강화 및 개선:
- WebSocket API: 실시간 양방향 통신을 지원하는 WebSocket을 서블릿 스펙에 포함시켰습니다. WebSocket을 사용하면 클라이언트와 서버 간의 지속적인 연결을 유지하면서 데이터가 실시간으로 전송될 수 있습니다.
- Java API for WebSocket: 이 API는 javax.websocket 패키지에 포함됩니다.
- 파일 업로드 API 개선: 서블릿 3.0에서 제공했던 파일 업로드 API의 개선과 확장.
- 비동기 작업 및 최적화: 비동기 작업에 대한 성능 최적화가 이루어졌습니다.
03. 톰캣 버젼 7.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>
서블릿스펙 | 톰캣버전 | 최소자바버젼 | jsp스펙 | 비고 |
3.0 | 7.0 | 6이상 | 2.2 | 03 |
주요 특징:
- 주석 기반 설정의 강력한 지원 (Annotations):
- 서블릿, 필터, 리스너, 세션 타임아웃 등 설정을 주석으로 할 수 있게 되었습니다.
- 예: @WebServlet, @WebFilter, @WebListener, @WebInitParam
- web.xml의 최소화: web.xml 파일에서 모든 설정을 명시할 필요 없이 주석으로 설정할 수 있게 되어, web.xml은 선택적이 되었습니다. web.xml은 여전히 존재하지만, 설정이 간결해졌습니다.
- 비동기 서블릿 처리 (Asynchronous Servlet): 서블릿이 비동기 방식으로 요청을 처리할 수 있는 기능이 도입되었습니다. 이를 통해 긴 시간 동안 블로킹되지 않도록 할 수 있습니다.
- 예: request.startAsync(), AsyncContext
- 파일 업로드 API (Multipart Config): 서블릿 3.0은 파일 업로드를 위한 @MultipartConfig 주석을 추가하여, 큰 파일을 업로드할 때 유용하게 사용됩니다.
- 예: @MultipartConfig(maxFileSize = 1024 * 1024 * 10)
- <servlet>와 <filter>의 매핑: 서블릿과 필터의 url-pattern 외에도 dispatcher-types를 정의하여 요청 유형을 제어할 수 있었습니다.
4. servlet 및 servlet-mapping 요소
서블릿 정의
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
- <servlet-name>: 서블릿의 이름을 정의합니다.
- <servlet-class>: 서블릿 클래스의 전체 경로를 지정합니다.
서블릿 매핑
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
- <servlet-name>: 매핑할 서블릿의 이름을 지정합니다.
- <url-pattern>: 클라이언트 요청 URL에 매핑될 URL 패턴을 지정합니다.
5. filter 및 filter-mapping 요소
필터 정의
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
- <filter-name>: 필터의 이름을 정의합니다.
- <filter-class>: 필터 클래스의 전체 경로를 지정합니다.
필터 매핑
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myServlet</url-pattern>
</filter-mapping>
- <filter-name>: 매핑할 필터의 이름을 지정합니다.
- <url-pattern>: 클라이언트 요청 URL에 매핑될 URL 패턴을 지정합니다.
6. listener 요소
리스너는 특정 이벤트(애플리케이션 시작, 종료 등)에 반응하여 동작하는 객체입니다. 리스너를 정의하려면 <listener> 요소를 사용합니다.
<listener>
<listener-class>com.example.MyListener</listener-class>
</listener>
- <listener-class>: 리스너 클래스의 전체 경로를 지정합니다.
주로 애플리케이션, 세션 또는 서블릿 컨텍스트의 라이프 사이클 이벤트를 감지하고 처리하는데 사용됩니다.
7. welcome-file-list 요소
애플리케이션이 URL 경로에 대한 요청을 받을 때, 기본 페이지를 지정하려면 welcome-file-list를 사용합니다. 예를 들어, 기본 페이지가 index.html 또는 index.jsp일 수 있습니다.
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
- <welcome-file>: 클라이언트가 요청한 디렉토리에 기본으로 표시할 파일을 지정합니다.
8. error-page 요소
특정 예외가 발생했을 때 클라이언트에게 보여줄 에러 페이지를 정의하려면 <error-page>를 사용합니다.
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/errorPage.jsp</location>
</error-page>
- <exception-type>: 특정 예외 유형을 정의합니다.
- <location>: 예외가 발생하면 리디렉션될 URL 경로를 지정합니다.
또는 HTTP 상태 코드에 따라 에러 페이지를 정의할 수 있습니다:
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
- <error-code>: 특정 HTTP 오류 코드(예: 404)를 지정합니다.
9. session-config 요소
세션 관련 설정을 정의하려면 <session-config>를 사용합니다. 예를 들어, 세션 타임아웃 값을 설정할 수 있습니다.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- <session-timeout>: 세션 타임아웃 시간을 분 단위로 설정합니다.
10. mime-mapping 요소
파일 확장자에 대한 MIME 타입을 설정할 수 있습니다. 예를 들어, .xyz 확장자를 가진 파일에 대해 application/xyz MIME 타입을 설정할 수 있습니다.
<mime-mapping>
<extension>xyz</extension>
<mime-type>application/xyz</mime-type>
</mime-mapping>
- <extension>: 파일 확장자를 정의합니다.
- <mime-type>: 해당 확장자의 MIME 타입을 정의합니다.
https://sayit.tistory.com/entry/버전Version별로-DTD선언-정리-in-webxml