web.xml是Java Web应用的部署描述符,必须置于WEB-INF目录下,其根元素为,需指定匹配Servlet规范的version及对应命名空间与schemaLocation。

web.xml 是 Java Web 应用的传统部署描述符(Deployment Descriptor),用于配置 Servlet、Filter、Listener、欢迎页、错误页等核心行为。虽然从 Servlet 3.0+ 开始支持注解(如 @WebServlet)替代部分配置,但 web.xml 仍广泛用于集中管理、兼容老项目或需要明确声明的场景。
web.xml 放在哪?基本结构长什么样?
它必须放在项目的 WEB-INF/ 目录下(即 src/main/webapp/WEB-INF/web.xml),且文件名严格为 web.xml。最简合法结构如下:
立即学习“Java免费学习笔记(深入)”;
注意:version 属性要和你用的 Servlet 规范匹配(常见 3.1、4.0、5.0),对应不同命名空间和 schemaLocation,否则启动会报错。
怎么注册一个 Servlet?
即使用了 @WebServlet,有时仍需在 web.xml 中显式注册,比如要指定加载顺序、设置初始化参数,或兼容旧容器。
- 用
声明 Servlet 类名和别名 - 用
绑定 URL 模式
示例:注册名为 MyServlet 的类,映射到 /hello
myServlet com.example.MyServlet 1 msg Hello from web.xml
myServlet /hello
说明: 值越小越早加载(负数表示不预加载); 可在 Servlet 的 init() 方法中通过 getInitParameter() 获取。
怎么配置 Filter 和 Listener?
Filter 用于拦截请求/响应(如编码过滤、权限校验),Listener 用于监听应用生命周期事件(如上下文启动、Session 创建)。
-
+:类似 Servlet,先声明再映射 -
:直接写全限定类名,无需映射
示例:添加字符编码 Filter 和上下文监听器
encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8
encodingFilter /*
com.example.MyContextListener
其他常用配置项
这些不是必须的,但很实用:
-
:定义默认访问页,如 index.html、index.jsp -
:按状态码或异常类型跳转错误页(如 404 → /404.html,Exception → /error.jsp) -
:全局上下文参数,可通过ServletContext.getInitParameter()获取,常用于框架配置(如 Spring 的 contextConfigLocation) -
:配置 Session 超时(单位:分钟)、HttpOnly、Secure 等安全属性
示例片段:
index.html
404 /404.html
logLevel DEBUG
30 true true
基本上就这些。web.xml 不复杂但容易忽略命名空间和版本匹配,写完建议用 IDE 校验或部署时看控制台是否报 schema 错误。现代项目可逐步迁移到注解 + Java Config,但理解 web.xml 仍是读懂传统 Java Web 工程的基础。










