配置 Servlet 及其映射
不同版本的 Sevlet 的 web.xml
配置文件的头部信息是不一样的。不建议使用 Servlet 3.0 和 3.0 以下版本,太过于老旧了。建议使用 3.1 和 4.0 版本。
Tomcat 8 支持 Servlet 3.1;Tomcat 9 支持 Servlet 4.0。
最新的Tomcat10.0.X 支持 Servlet 5.0 和 JSP 3.0
web.xml 头部声明信息
不同的 Servelt 版本会影响到 “web.xml” 配置文件中的头部的声明。越高版本的 Servlet 功能越丰富也越强大。
## 3.0头部信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="3.0" xmlns="http://java.sun.com/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_0.xsd">
</web-app>
## 3.1头部信息
<?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>Servlet 3.1 Web Application</display-name>
## 4.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">
<display-name>Servlet 4.0 Web Application</display-name>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextClass</param-name>
<param-value><!-- 相较于 XML 配置,Java 代码配置『多』一个这个 -->
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
com.example.config.SpringServiceConfig,
com.example.config.SpringDaoConfig
</param-value>
</context-param>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param><!-- 这个是『多』出来的一个 -->
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.example.config.SpringWebConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.do</url-pattern> <!-- 后缀拦截 -->
</servlet-mapping> <!-- / 默认/兜底拦截 -->
</web-app> <!-- /* 路径拦截,拦截所有请求-->
配置 Servlet 映射关系
从 Servlet 3.0 开始(含 3.0)支持注解配置。语法如下:
@WebServlet(urlPatterns = "url匹配规则")
public class XxxServlet extends HttpServlet {
...
}
关于 url 匹配规则参看另一篇笔记《Servlet基础之URL匹配规则》。
Servlet 3.0 以下版本(不含 3.0),配置 Servlet 及其映射关系,只能在 “web.xml” 中配置。
语法如下:
<servlet>
<servlet-name>字符串</servlet-name>
<servlet-class>Servlet 类的完全限定名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>字符串</servlet-name>
<url-pattern>url 匹配规则</url-pattern>
</servlet-mapping>
配置一个 Servlet 需要出现一对 “servlet” 和 “servlet-mapping” 。
简而言之,servlet 和 servlet-mapping 总是成对出现的。
配对的 “servlet” 和 “servelt-mapping” 中的 “servlet-name” 必须一样 。