在servlet路径映射中,关于url-pattern的配置有三种,分别是完全路径匹配、目录匹配、扩展名匹配
其优先级分别为:完全路径匹配>目录匹配>扩展名匹配;
一、三种路径印射的区别
在服务器段的java代码是:
package servlet0917;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class servlet01 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("doget方法被调用"); }}
1、完全路径代码:
servlet01 servlet0917.servlet01 servlet01 /servlet/servlet01
访问结果:
访问路径:http://localhost:8080/servlet/servlet01
这种模式也叫完全模式匹配。
2、目录匹配也叫通配符匹配
(1、)web端代码:
servlet01 servlet0917.servlet01 servlet01 /servlet/*
访问路径可以有多个选择:如下图
当servlet中的路径映射为<url-pattern>/servlet/*</url-pattern>,从字面意思也可以理解出servlet后面跟的是一个整目录,目录可以随意访问的。
(2)既url路径中直接是/*
servlet01 servlet0917.servlet01 servlet01 /*
其访问路径没有限制,访问路径可以是任何字符与数字,这里就不向大家一一展示了。
3、后缀名匹配,不能以/开头,要以*开头,比如 *.do
web端代码:
servlet01 servlet0917.servlet01 servlet01 *.do
在访问路径时,其*可以换成任何字符与数字:如下图所示
二:印射路之间的优先级
先定义两个servlet文件,如图所示,这里就不像大家展示其代码了
1、web端代码:比较/abc/*与/*的优先级,结论:如果同样目录匹配,限定范围越紧准,越先被匹配
servlet01 servlet0917.servlet01 servlet01 /abc/* servlet02 servlet0917.servlet02 servlet02 /*
2、端口代码:/abc/*与/abc比较,先被访问的是完全路径匹配,其次才是目录匹配(ps:目录匹配大多都带有*)
servlet01 servlet0917.servlet01 servlet01 /abc/* servlet02 servlet0917.servlet02 servlet02 /abc
访问结果:
3、用目录路径/abc/*与扩展名*.do访问,结果是目录路径先被访问
servlet01 servlet0917.servlet01 servlet01 /abc/* servlet02 servlet0917.servlet02 servlet02 *.do d
访问结果:
4、web端代码:/*与*.do,先被访问的还是目录路径,
servlet01 servlet0917.servlet01 servlet01 /* servlet02 servlet0917.servlet02 servlet02 *.do d
访问结果: