web.xml是什么 如何用它来配置Java Web应用

月夜之吻

月夜之吻

2026-03-22

689人浏览

原创

web.xml是java web应用的部署描述符,用于配置servlet、filter等容器级组件;在servlet 2.5及更早版本、全局错误页、安全约束、高级会话cookie配置等场景下必须使用。

web.xml是什么 如何用它来配置java web应用

web.xml 是 Java Web 应用的部署描述符(Deployment Descriptor),本质是一个 XML 文件,用于声明 Servlet、Filter、Listener、欢迎页、错误页、安全约束等容器级配置。它在 Servlet 2.5–3.0 规范中是强制性的,在 Servlet 3.0+ 中变为可选(可用注解替代),但仍有大量老项目、中间件或特定场景依赖它。

什么时候必须写 web.xml

不是所有项目都需要手动写 web.xml,但以下情况绕不开:

  • 使用 Servlet 2.5 或更早规范(如 WebLogic 10.3、WebSphere 7)
  • 需要配置 <error-page></error-page> 映射 HTTP 状态码或异常类(注解无法覆盖 404/500 全局页面)
  • 注册实现了 ServletContextListener 的监听器且不支持 @WebListener(比如某些 OSGi 容器或定制 ClassLoader)
  • 配置 <security-constraint></security-constraint> 做基于角色的 URL 访问控制(@ServletSecurity 支持有限)
  • 需要设置 <session-config></session-config> 中的 <cookie-config></cookie-config> 高级属性(如 httpOnlysecuresameSite)——部分容器对注解支持不完整

web.xml 的基本结构和必填项

一个最小可用的 web.xml 必须包含根元素 <web-app></web-app>、命名空间声明和版本号。Servlet 3.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"><display-name>myapp</display-name></web-app>

注意点:

  • version 属性必须与使用的 Servlet 规范严格匹配,否则 Tomcat/Jetty 可能拒绝启动或静默降级
  • xsi:schemaLocation 中的 XSD 地址不能随意替换为本地路径或旧版地址(如 java.sun.com 已失效)
  • <display-name></display-name> 不是必需的,但部分 IDE 和管理控制台会读取它

常见配置项写法与易错点

实际开发中最常出问题的是顺序和大小写。Servlet 规范强制要求元素按 DTD/XSD 定义顺序出现(例如 <servlet></servlet> 必须在 <servlet-mapping></servlet-mapping> 之前,<filter></filter><filter-mapping></filter-mapping> 之前)。

典型配置片段示例:

<servlet><servlet-name>userServlet</servlet-name><servlet-class>com.example.UserServlet</servlet-class><init-param><param-name>configFile</param-name><param-value>/WEB-INF/user-config.properties</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>userServlet</servlet-name><url-pattern>/api/user/*</url-pattern></servlet-mapping><filter><filter-name>authFilter</filter-name><filter-class>com.example.AuthFilter</filter-class></filter><filter-mapping><filter-name>authFilter</filter-name><url-pattern>/api/*</url-pattern></filter-mapping>

容易踩的坑:

  • <servlet-name></servlet-name><servlet></servlet><servlet-mapping></servlet-mapping> 中必须完全一致(区分大小写)
  • <url-pattern></url-pattern> 中不能有空格,/api/user/* 匹配 /api/user/123,但不匹配 /api/user(结尾无斜杠)
  • <load-on-startup></load-on-startup> 值为负数表示不预加载;为 0 或正数时数值越小优先级越高;若多个 Servlet 设为相同值,容器决定顺序
  • Filter 链顺序由 <filter-mapping></filter-mapping> 在文件中的**出现顺序**决定,不是 <filter></filter> 的顺序

现代项目里还该用 web.xml 吗?

新项目优先用注解(@WebServlet@WebFilter@WebListener)和 Java 配置(ServletContainerInitializer 或 Spring Boot 的 @Bean ServletWebServerFactory)。但别彻底抛弃 web.xml

  • 它仍是调试容器行为的“真相源”:当注解没生效时,看容器日志是否加载了 web.xml,能快速判断是规范版本问题还是扫描失败
  • 某些企业防火墙或安全审计要求所有入口点必须显式声明在 XML 中(禁止运行时动态注册)
  • 混合部署时(如遗留 Filter + 新注解 Servlet),web.xml 的 Filter 仍会参与链,顺序需人工协调

最麻烦的其实是版本混用:比如用了 @WebServlet(urlPatterns = "/test"),但 web.xml 里又声明了同名 <servlet></servlet>,Tomcat 会报 Duplicate servlet name 错误——这种冲突往往在集成测试阶段才暴露。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.26

320

5

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

242

5

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

384

5

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

222

5

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

285

5

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

306

5

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

416

5

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

238

5

有哪些常见的tomcat漏洞
有哪些常见的tomcat漏洞

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

953

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习