Tomcat之web.xml中的标签

关于web.xml配置中的<url-pattern>

标签<url-pattern>

<url-pattern>是咱们用Servlet作Web项目时须要常常配置的标签,例:css

<servlet>
<servlet-name>index</servlet-name>
<servlet-class>com.we.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>html

当咱们在浏览器的地址栏里输入http://localhost:8080/we/index时[假设我部署在webapps目录下的项目名为we]web

就会匹配到咱们指定的<url-pattern>中,即/index而后一步一步找到对应的<servlet-class>浏览器

那咱们输入的URL:http://localhost:8080/we/index又是如何与<url-pattern>中的/index匹配的呢?服务器

首先咱们要知道URL的组成app

http://localhost:8080    咱们能够理解为是咱们的服务器地址,而该地址以后的部分咱们统称为:RequestURIwebapp

RequestURI是咱们须要重点注意的部分,其又能够分解为几部分jsp

/we  是咱们的ServletConext的上下文地址,咱们称为ServletContext Path,能够简单理解为部署项目时的webapps目录下的项目名url

/index  是咱们的Servlet的地址,咱们称为Servlet Path,这里就是须要与咱们的<url-pattern>匹配的内容spa

注:在/index后边咱们还能够跟其余的信息,例如:/index?name=admin&pass=admin  这是其中一种明文表示的方式

 

标签<url-pattern>中*的使用

咱们知道在写<url-pattern>时有一种通配符的使用写法,即*

1.当我使用<url-pattern>/*</url-pattern>时,咱们能够匹配全部的请求,即全部的请求都会通过该标签对应的Servlet

此时就须要注意静态资源的请求,由于当咱们使用http://localhost:8080/we/login.html时,依然会匹配该Servlet,

而不少静态资源实际上是不须要通过Servlet的,例如:js,css,html,jsp,img等静态资源文件,此时就须要在该Servlet中对静态资源作特殊处理

2.若是配有以下两个<url-pattern>标签时,URL地址为http://localhost:8080/we/index时又是如何匹配的呢?

<url-pattern>/index</url-pattern>

<url-pattern>/*</url-pattern>

上边咱们已经说过,/*能够匹配全部的请求,而/index也能够匹配咱们的URL地址,此时URL地址会自动且优先的进行精确匹配,即/index,

且只匹配一次,也就是说一旦匹配到一个Servlet即执行该Servlet再也不对其余Servlet进行匹配,

当咱们输入一个http://localhost:8080/we/login时,因为此时匹配不到/login因此只能匹配/*了

3.在Servlet Path部分咱们还可使用更精确的匹配,例如:

<url-pattern>/index/login</url-pattern>匹配http://localhost:8080/we/index/login

<url-pattern>/index/logout</url-pattern>匹配http://localhost:8080/we/index/logout

此时/index/login和/index/logout才是咱们的Servlet Path

 4.咱们能够经过使用<url-pattern>*.do</url-pattern>来过滤请求,

这样若是咱们在页面中的请求中添加后缀名.do就能够避免对静态资源的过滤了,也就不须要对静态资源作特殊处理了

 

注:<url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>效果是同样的 

相关文章
相关标签/搜索