Servlet类编写好后,要想被访问到,就需要配置其访问路径(==urlPattern==)

  • 一个Servlet,可以配置多个urlPatternimage.pngimage.png

在浏览器上输入http://localhost:8080/web-demo/demo7,http://localhost:8080/web-demo/demo8这两个地址都能访问到ServletDemo7的doGet方法。

==urlPattern配置规则==

1.精确匹配image.pngimage.png

访问路径http://localhost:8080/web-demo/user/select

2.目录匹配image.pngimage.png

访问路径http://localhost:8080/web-demo/user/任意
==思考:==

  1. 访问路径http://localhost:8080/web-demo/user是否能访问到demo9的doGet方法?
  2. 访问路径http://localhost:8080/web-demo/user/a/b是否能访问到demo9的doGet方法?
  3. 访问路径http://localhost:8080/web-demo/user/select是否能访问到demo9还是demo8的doGet方法?

答案是: 能、能、demo8,进而我们可以得到的结论是/user/中的/代表的是零或多个层级访问目录同时精确匹配优先级要高于目录匹配。


3.扩展名匹配image.pngimage.png

访问路径http://localhost:8080/web-demo/任意.do
==注意==:

  1. 如果路径配置的不是扩展名,那么在路径的前面就必须要加/否则会报错1627274483755.png
  2. 如果路径配置的是.do,那么在.do的前面不能加/,否则会报错1627274368245.png

    4.任意匹配image.pngimage.png

    访问路径http://localhost:8080/demo-web/任意![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1657035754533-9d9a70ce-c807-404d-9715-4ce4fd0ea97c.png#clientId=u1b278787-8ca0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=281&id=ub2a32cd1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=351&originWidth=726&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23207&status=done&style=none&taskId=ucd81d4e3-8df7-4db9-bccc-ad5154eb41a&title=&width=580.8)
    访问路径`http://localhost:8080/demo-web/任意

    ==注意:==/和/*的区别

  3. 当我们的项目中的Servlet配置了 “/“,会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet

  4. 当我们的项目中配置了”/*”,意味着匹配任意访问路径
  5. DefaultServlet是用来处理静态资源,如果配置了”/“会把默认的覆盖掉,就会引发请求静态资源的时候没有走默认的而是走了自定义的Servlet类,最终导致静态资源不能被访问

小结

  1. urlPattern总共有四种配置方式,分别是精确匹配、目录匹配、扩展名匹配、任意匹配
  2. 五种配置的优先级为 精确匹配 > 目录匹配> 扩展名匹配 > /* > / ,无需记,以最终运行结果为准。