一、Servlet容器对URL的匹配过程:
当客户端发送一个请求到Servlet容器的时候,容器会将请求的URL减去当前web应用的路径作为Servlet的映射,找到符合的Servlet并进行处理响应,如访问的url为http://localhost:8080/FirstWebDemo/index.jsp,那么容器得到Servlet的映射为/index.jsp,根据匹配规则匹配成功后则无视其他的Servlet,其中。
二、路径匹配的类别及匹配规则:
1. 精确路径匹配
/first http://localhost:8080/ProjectName/first
/xxx/demoServlet http://localhost:8080/ProjectName/xxx/demoServlet
2. 模糊路径匹配
/* http://localhost:8080/ProjectName/任意路径
/test/* http://localhost:8080/ProjectName/test/任意路径
*.后缀名 http://localhost:8080/ProjectName/任意路径.do 如:*.do *.action *.html(伪静态)
3. 匹配规则
(1) Servlet的映射要么以/开头,要么以*开头,只写例如news是非法路径,同时写两个模糊匹配是非法路径,例如/news/*.action。
(2) 当输入的URL有多个Servlet同时匹配情况下:
优先级最高的是精确路径匹配,其次为模糊路径匹配,例如Servlet1的映射为/index.jsp,Servlet2的映射为/*,那么客户端发出请求http://localhost/index.jsp后会和/index.jsp进行匹配,匹配成功后边无视其它Servlet。
最长路径优先匹配。在同等匹配条件下,即都为精确路径匹配或模糊匹配,例如Servlet1的映射为/news/*,而Servlet2的映射为/news/normalnews/*,那么客户端发出请求http://localhost/news/normalnews后会和Servlet2匹配。
模糊匹配中的后缀名结尾的映射优先级最低。
注意:/是servlet中预定义好的一个映射路径:servlet的缺省映射路径(<url-pattern>/</url-pattern>)是在tomcat服务器内置的一个映射路径。该路径对应的是一个DefaultServlet(缺省Servlet)。这个缺省的Servlet的作用是用于解析web应用的静态资源文件。总之,先找动态资源,当动态资源不存在的时候,再找静态资源。
参考自:https://www.cnblogs.com/fnz0/p/5586019.html