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

关于web.xml配置中的<url-pattern>标签<url-pattern><url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例:<servlet><servlet-n

大家好,又见面了,我是你们的朋友全栈君。

标签<url-pattern>

<url-pattern>是我们用Servlet做Web项目时需要经常配置的标签,例:

<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>

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

就会匹配到我们指定的<url-pattern>中,即/index然后一步一步找到对应的<servlet-class>

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

首先我们要知道URL的组成

http://localhost:8080    我们可以理解为是我们的服务器地址,而该地址之后的部分我们统称为:RequestURI

RequestURI是我们需要重点注意的部分,其又可以分解为几部分

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

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

注:在/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>效果是一样的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155682.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 遇到“备份集中的数据库备份与现有XXX数据库不同”的错误

    遇到“备份集中的数据库备份与现有XXX数据库不同”的错误当在使用另外一台的数据库备份文件.bak恢复到本机数据库时,遇到“备份集中的数据库备份与现有XXX数据库不同”的错误,后直接登录本机SQLServer数据库master,新建查询,并执行以下命令:    RESTOREDATABASE[XXX]FROM     DISK=NG:/data/zt20080720.bakWITH FILE=1,     NOUNLOA

    2022年6月3日
    35
  • 5款强大的开源报表工具有哪些_开源报表工具 java

    5款强大的开源报表工具有哪些_开源报表工具 java作者:JEECG开源社区來源:简书最近发现几款不错的开源报表,还提供源码,现在给大家分享一下,希望能带来帮助!1、项目名称:积木报表项目简介:积木报表,免费的企业级WEB报表工具。专注于…

    2022年10月20日
    2
  • java删除文件目录及文件_Java删除文件,目录

    java删除文件目录及文件_Java删除文件,目录java删除文件目录及文件TodaywewilllookintoJavadeletefileandjavadeletedirectoryexamples.Earlierwelearnedhowtocreateafileinjava.今天,我们将研究Java删除文件和Java删除目录示例。之前我们学习了如何在java中创建文件。Java删除文件…

    2022年6月6日
    91
  • 从零实现一个 Promise

    从零实现一个 Promise

    2021年7月2日
    90
  • python提取字符串中的数字「建议收藏」

    python提取字符串中的数字「建议收藏」一、isdigit()函数isdigit()函数是检测输入字符串是否只由数字组成。如果字符串只包含数字则返回True否则返回False。dream=”123456″print(dream.isdigit())#返回:Truedream=”123abc456″print(dream.isdigit())#返回:Falsedream=’abcd’print(dream.isdigit())#返回:False二、filter()函数说明:filter()函

    2022年10月10日
    2
  • MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换

    MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换一、概述在使用JavaJDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案。二、映射类型java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型,官名也叫JDBC类型。每个数据库产品的数据类型定义各不相同,但都有JDBC类型与之对应,如MySQL的BIGINT–>JDBC的BIGINT…

    2022年7月20日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号