web.xml 是 Java Web 應用的部署描述符,遵循 Servlet 規範 DTD。文件順序敏感:XML 聲明 → DOCTYPE → <web-app> 根元素 → 子元素按規範定義順序排列。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "https://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <!-- 子元素順序:icon? display-name? description? context-param* filter* filter-mapping* listener* servlet* servlet-mapping* session-config? mime-mapping* welcome-file-list? error-page* taglib* resource-env-ref* resource-ref* security-constraint* login-config? security-role* env-entry* ejb-ref* ejb-local-ref* --> </web-app>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>moreservlets.TestServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
<load-on-startup>1</load-on-startup> <!-- 啟動時加載 -->
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet> <servlet-name>InitPage</servlet-name> <jsp-file>/InitPage.jsp</jsp-file> <init-param><param-name>firstName</param-name><param-value>Bill</param-value></init-param> </servlet> <servlet-mapping> <servlet-name>InitPage</servlet-name> <url-pattern>/InitPage.jsp</url-pattern> <!-- 覆蓋默認訪問路徑 --> </servlet-mapping>
<context-param>
<param-name>support-email</param-name>
<param-value>admin@company.com</param-value>
</context-param>
<!-- ServletContext.getInitParameter("support-email") 獲取 -->
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param> <init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> <!-- 或指定 servlet-name --> </filter-mapping>
<listener> <listener-class>com.example.SessionListener</listener-class> </listener>
<welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list>
<error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/error/500.jsp</location> </error-page>
<security-constraint>
<web-resource-collection>
<web-resource-name>AdminArea</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee> <!-- 強制 HTTPS -->
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login-error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role><role-name>admin</role-name></security-role>
<session-config> <session-timeout>30</session-timeout> <!-- 分鐘 --> </session-config>
<mime-mapping><extension>pdf</extension><mime-type>application/pdf</mime-type></mime-mapping> <mime-mapping><extension>xls</extension><mime-type>application/vnd.ms-excel</mime-type></mime-mapping> <mime-mapping><extension>doc</extension><mime-type>application/msword</mime-type></mime-mapping>
<icon><small-icon>/images/app_16.png</small-icon><large-icon>/images/app_32.png</large-icon></icon> <display-name>MyWebApp</display-name> <description>企業級 Web 應用示例</description>
/* 應在最前;load-on-startup;auth-constraint 僅授權必要角色,transport-guarantee 強制敏感路徑 HTTPS;session-timeout,預設 30 分鐘。掌握 web.xml 核心配置,是從「能跑通」邁向「工程化、可維護、可擴展」Java Web 開發的必經之路。