urlPattern配置
Servlet想要被访问,必须配置其访问路径
一个Servlet可以配置多个urlPattern
-
@WebServlet注解中的urlPatterns属性是一个数组, 也就是我们可以配置多个urlPattern给一个Servlet,那么通过多个urlPattern我们都可以访问到这个Servlet
-
eg:
@WebServlet(urlPatterns = {"/demo1","/demo2"})
- 也就是我们服务器中的一个Servlet的访问路径可能有多个, 通过这多种访问路径我们都可以访问到对应的Servlet资源
urlPattern配置规则
①精确匹配:
-
配置路径:
@WebServlet("/user/select")
-
访问路径:
localhost:8080/web-demo/user/select
- 这里我们是访问本地的tomcat服务器中的名为web-demo的web项目下的配置路径为/user/select的Servlet
②目录匹配
-
配置路径:
@WebServlet("/user/*")
- 通过user目录去匹配, 只要是在user目录之下的路径都可以匹配成功, 都可以访问到Servlet类中
- 但是肯定是在tomcat中的对应项目之下访问
- 通过user目录去匹配, 只要是在user目录之下的路径都可以匹配成功, 都可以访问到Servlet类中
-
访问路径
localhost:8080/web-demo/user/aaa //或者 localhost:8080/web-demo/user/bbb
③扩展名匹配
-
配置路径
@WebServlet("*.do")
- 通过do扩展名去匹配, 只要是扩展名为do的都可以匹配成功, 都可以访问到Servlet中
- 但是肯定是在tomcat中的对应项目之下访问
- 通过do扩展名去匹配, 只要是扩展名为do的都可以匹配成功, 都可以访问到Servlet中
-
访问路径
localhost:8080/web-demo/aaa.do localhost:8080/web-demo/bbb.do
-
注意: 我们通过扩展名方式匹配的时候开头部分没有/(斜杠),如果添加了"/",那么就会出现一个运行时异常
- 其他的三种方式开头的时候都要加"/"(斜杠)
④任意匹配
-
配置路径
@WebServlet("/") @WebServlet("/*")
-
访问路径
localhost:8080/web-demo/hehe
-
使用/和/*实现任意匹配的区别:
- 当我们的项目中的Servlet配置了"/"作为访问路径, 那么就会覆盖掉tomcat中的DefaultServlet
- 当其他的url-Pattern都匹配不上时就会走这个DefaultServlet类
- 我们的tomcat中的DefaultServlet是针对于我们的所有Web应用程序的, DefaultServlet是用于处理Servlet中静态资源的访问的
- 所以当我们的DefaultServlet被覆盖掉之后,就不能处理Servlet中静态资源的访问了, 所以我们不建议使用"/"
- 虽然"/*“不会覆盖tomcat中的DefaultServlet, 但是我们也不建议使用”/ *"
- 所以当我们的DefaultServlet被覆盖掉之后,就不能处理Servlet中静态资源的访问了, 所以我们不建议使用"/"
- 当我们的项目中的Servlet配置了"/"作为访问路径, 那么就会覆盖掉tomcat中的DefaultServlet
各种urlPattern配置的优先级:
精确路径 > 目录路径 > 扩展名路径 > /* > /
- 当一个访问路径同时满足多种匹配方式的时候,这个访问路径会优先匹配多种匹配方式中的优先级最高的
- 越精确优先级就越高, 也越会被优先选择