有什么用_pattern和way的区别

有什么用_pattern和way的区别开始:在利用servlet或filter进行url请求的匹配时,很关键的一点是匹配规则,但是servlet容器中的匹配规则既不是简单的通配也不是正则表达式而是有自己的规则比较容易混淆绝对路径和相对路径当浏览器发起一个url请求后,该请求发送到servlet容器的时候,容器会先将请求的url减去当前应用上下文的路径作

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

开始:

在web应用部署描述符中,用于映射的语法规定如下:

①以”/”字符开头,并以”/*”结尾的字符串用于路径映射

②以”*”开头的字符串被用于扩展名映射

③空字符串(“”)(?”” 和”  “相等吗 ?)是用于指定精确映射应用程序 context root 的URL 模式,比如从 http://host:port/<contextroot>/来的请求。

④字符串中仅有”/”字符时,表示应用程序”默认”的servlet。

在这种情况下servlet路径是请求url去掉context路径,

⑤其他的字符串仅用于精确匹配

<url-pattern>的三种写法

1.精确匹配。以”/”开头,加上servlet名称

    ◇/desc

2.路径匹配。以”/”开头,加上通配符”*”。

    ◇/*

3.扩展名匹配。以通配符”*”开头,加上扩展名

    ◇*。action                                                                                                                                                                 

在利用servlet或filter进行url请求的匹配时,

很关键的一点是匹配规则,

但是servlet容器中的匹配规则既不是简单的通配

也不是正则表达式

而是有自己的规则

比较容易混淆

●绝对路径和相对路径

当浏览器发起一个url请求后,该请求发送到servlet容器的时候,

容器会先将请求的url减去当前应用上下文的路径作为servlet的映射url,

比如url是

http://localhost:8080/myapp/demo/detail.jsp

其应用上下文是myapp,容器会将http://localhost:8080/myapp去掉,剩下的/demo/detail.html部分拿来做servlet的映射匹配

这个映射过程是有优先顺序的(具体的优先顺序规则后面介绍)

而且当有一个servelt匹配成功以后,就不会去理会剩下的servlet了

Filter的匹配规则和servlet一样,但对于filter,不会像servlet那样只匹配一个servlet

因为fileter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter

Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同

下面介绍各种匹配规则

一.精确匹配

<url-pattern>中的配置的项必须与url完全精确匹配

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/kata/detail.html</url-pattern>
    <url-pattern>/demo.html</url-pattern>
    <url-pattern>/table</url-pattern>
</servlet-mapping>

Jetbrains全家桶1年46,售后保障稳定
当在浏览器中输入如下几种url时,都会被匹配到该servlet


http://10.43.11.143/myapp/kata/detail.html


http://10.43.11.143/myapp/demo.html


http://10.43.11.143/myapp/table

注意:

http://localhost:8080/myapp/demo/是非法的url,不会被当作

http://localhost:8080/myapp/demo识别

上述url后面跟任意的查询条件,都会被匹配,如

http://localhost:8080/myapp/demo?hello?xxx  这个请求就会被匹配到MyServlet

二.扩展名匹配

匹配规则如下

<servlet-mapping>
	<servlet-name>MyServlet</servlet-name>
	<url-pattern>*.jsp</url-pattern>
</servlet-mapping>

则任何扩展名为 jsp(文件名和路径任意)的url请求都会匹配,

比如下面的url都会被匹配

http://localhost:8080/myapp/demo/demo.jsp

http://localhost:8080/myapp/demo/test.jsp


三.路径匹配

如果匹配规则如下

<servlet-mapping>
	<servlet-name>MyServlet</servlet-name>
	<url-pattern>/demo/*</url-pattern>
</servlet-mapping>

则请求的url只要前面(myapp之后)的路径是/demo,而后面的路径可以任意

比如下面的url都会被匹配

http://localhost:8080/myapp/demo/demo.html

http://localhost:8080/myapp/demo/test.jsp

http://localhost:8080/myapp/demo/test/detail.html

http://localhost:8080/myapp/demo/action

http://localhost:8080/myapp/demo/action/


注意:路径和扩展名匹配无法通时设置,比如下面的三个<url-pattern>都是非法的,如果设置,启动tomcat服务器会报错

四,匹配任意的url

如果<url-pattern>配置成如下两种的任意一种

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

则所有的url都可以被匹配上。其中/*是路径匹配,只是路径就是/。

五,优先顺序:

当一个url与多个servlet的匹配规则可以匹配时,则按照”精确路径>最长路径>扩展名”这样的优先级匹配到对应的servlet

举例如下:

总结: 本文介绍了servlet的匹配规则,总的来说就是分为 精确,路径和扩展名三种匹配方式,并且介绍了优先级

 

java web中servlet、jsp、html 互相访问的路径问题。

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

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

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


相关推荐

  • Timer时间控件

    Timer时间控件第一步、创建一个Windows窗体,第二步、创建样式,在工具箱中找到TextBox和Labell、Button、timer。第三步、改变属性的Name和Text(就是改写名称)第四步、排版按钮1:使用的控制器是Label;name改为lblTime2:使用的控制器是TextBox;Name改为txtTime3:使用的控制器是Button;Name改为btnGet4…

    2022年5月23日
    52
  • java中hashcode的用法_javahashcode作用

    java中hashcode的用法_javahashcode作用hashcode()是干什么用的?首先hashcode是哈希算法的一中简单实现,他是一个对象的哈希吗值。一般和equals一起使用。 hashcode也是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样的位置 01234567 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,

    2025年8月28日
    7
  • Springboot启动扩展点超详细总结,再也不怕面试官问了

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:铂赛东 https://www.jianshu.com/p/38d834db7413 1.背景 Spring的…

    2021年6月26日
    91
  • unity支持python语言吗_scratch三维立体

    unity支持python语言吗_scratch三维立体在上次发布拙作后,有不少童鞋询问本人如何学习Unity3D。本人自知作为一名刚入门的菜鸟,实在没有资格谈论这么高大上的话题,生怕误导了各位。不过思来想去,决定还是写一些自己的经验,如果能给想要入门U3D的您一些启发,便再好不过了。如何入门谈起自己是如何入门U3D,这还得从一年半前说起。那是在一个月黑风高的夜晚…(此处省略一万字)。就这样,我对这款游戏引擎产生了浓厚的兴趣,走上了自学的道路。相比…

    2022年8月10日
    5
  • 基于JavaMail的Java邮件发送:复杂邮件发送

    基于JavaMail的Java邮件发送:复杂邮件发送本文链接:http://blog.csdn.net/xietansheng/article/details/51722660上一篇文章基于JavaMail的Java邮件发送:简单邮件发送讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。一封复杂的邮件内容可以看做是由很多节点(或者可以说是“片段”…

    2022年5月14日
    42
  • 公司新人svn使用教程[通俗易懂]

    公司新人svn使用教程[通俗易懂]https://blog.csdn.net/maplejaw_/article/details/52874348

    2022年8月6日
    7

发表回复

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

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