首页 web前端 js教程 servlet与filter的url-pattern设置方式及映射规则

servlet与filter的url-pattern设置方式及映射规则

Sep 20, 2017 am 10:03 AM
filter servlet



<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"; color:rgb(0,128,128); line-height:1.5!important'></span><p style='margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Arial,"Microsoft YaHei"; line-height:19px; word-break:break-all; background-color:rgb(254,254,242)'><span style="margin:0px; padding:0px; font-family:verdana,sans-serif; line-height:21px">Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单。servlet和filter中的url-pattern有一些文章在里面的,总结了一些东西,以免遇到问题又要浪费时间。 <br>   </span></p><p style='margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Arial,"Microsoft YaHei"; line-height:19px; word-break:break-all; background-color:rgb(254,254,242)'><span style="margin:0px; padding:0px; font-family:verdana,sans-serif; line-height:21px">一,servlet容器对url的匹配过程: <br><br>当 一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是 http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉, 剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下 的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下: <br><br><span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>1.     精确路径匹配。</span>例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的 servlet了。 <br><br><span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>2.     最长路径匹配</span>。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此 时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。 <br><br><span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>3.     扩展匹配</span>,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action <br><br>4.     如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>default servlet</span>,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。 <br><br>     根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。 <br><br>      对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一 个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。 <br>   </span></p><p style='margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Arial,"Microsoft YaHei"; line-height:19px; word-break:break-all; background-color:rgb(254,254,242)'><span style="margin:0px; padding:0px; font-family:verdana,sans-serif; line-height:21px">二,url-pattern详解 <br><br>         在web.xml文件中,以下语法用于定义映射: <br><br>l. 以<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>”/’开头</span>和<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>以”/*”结尾</span>的是用来做<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>路径映射</span>的。 <br><br>2. 以<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>前缀”*.”开头</span>的是用来做<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>扩展映射</span>的。 <br><br>3. <span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>“/”</span> 是用来定义<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>default servlet映射</span>的。 <br><br>4. 剩下的都是用来定义<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>详细映射</span>的。比如: /aa/bb/cc.action <br><br>所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为<span style='margin:0px; padding:0px; font-family:Arial,"Microsoft YaHei"'>这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断</span>。</span></p><p style='margin:10px auto; padding-top:0px; padding-bottom:0px; font-family:Arial,"Microsoft YaHei"; line-height:19px; word-break:break-all; background-color:rgb(254,254,242)'><span style="margin:0px; padding:0px; font-family:verdana,sans-serif; line-height:21px">另外,关于url-pattern映射之后, request的servletContextPath , ServletPath , PathInfo 情况,可参照下面链接的文章</span></p> 
 1 servlet与filter的url-pattern设置方式: 
 2  
 3 1、精确匹配: 
 4 /directory/file1.jsp 
 5 /directory/file2.jsp 
 6 /directory/file3.jsp 
 7  
 8 2、目录匹配: 
 9 /directory/*
 10 
 11 3、扩展匹配:
 12 *.jsp
 13 
 14 注意:下面的不支持:
 15 /direcotry/*.jsp
 16 
 17 /和/*之间的区别:
 18 <url-pattern>/</url-pattern>: 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
 19 <url-pattern>/*</url-pattern>:会匹配所有url:路径型的和后缀型的url(包括/login , *.jsp , *.js 和 *.html 等)
 20 <url-pattern>/</url-pattern>: 甚至会造成The requested resource () is not available.

以上是servlet与filter的url-pattern设置方式及映射规则 的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1510
276
servlet生命周期分几个阶段 servlet生命周期分几个阶段 Feb 23, 2023 pm 01:46 PM

Servlet生命周期是指servlet从创建直到毁灭的整个过程,可分为3个阶段:1、初始化阶段,调用init()方法实现Servlet的初始化工作;2、运行阶段(处理请求),容器会为指定请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法;3、销毁阶段。

解决'[Vue warn]: Failed to resolve filter”错误的方法 解决'[Vue warn]: Failed to resolve filter”错误的方法 Aug 19, 2023 pm 03:33 PM

解决“[Vuewarn]:Failedtoresolvefilter”错误的方法在使用Vue进行开发的过程中,我们有时候会遇到一个错误提示:“[Vuewarn]:Failedtoresolvefilter”。这个错误提示通常出现在我们在模板中使用了一个未定义的过滤器的情况下。本文将介绍如何解决这个错误并给出相应的代码示例。当我们在Vue的

什么是servlet 什么是servlet Jan 28, 2023 am 09:51 AM

Servlet全称“Java Servlet”,中文意思为小服务程序或服务连接器,是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

Java Servlet如何实现分布式会话管理? Java Servlet如何实现分布式会话管理? Apr 16, 2024 pm 02:48 PM

JavaServlet中实现分布式会话管理的方法有两种:1.会话复制:将会话数据复制到各个服务器。2.会话分布:使用集中式存储服务存储会话数据,由多个服务器访问。具体实现方式有:会话复制配置web.xml文件中的true;会话分布使用Redis:引入jedis库,编写Servlet使用Jedis存储和检索会话数据;使用SpringSession:引入spring-session依赖,注入SessionRepository,通过它操作会话数据。

Java Servlet的应用场景有哪些? Java Servlet的应用场景有哪些? Apr 17, 2024 am 08:21 AM

JavaServlet可用于:1.动态内容生成;2.数据访问与处理;3.表单处理;4.文件上传;5.会话管理;6.过滤器。示例:创建一个FormSubmitServlet来处理表单提交,将name和email作为参数,并重定向到success.jsp。

Web开发的Java技术栈:了解Java EE、Servlet、JSP、Spring等常用于Web开发的技术 Web开发的Java技术栈:了解Java EE、Servlet、JSP、Spring等常用于Web开发的技术 Dec 26, 2023 pm 02:29 PM

JavaWeb开发技术栈:掌握JavaEE、Servlet、JSP、Spring等用于Web开发的技术随着互联网的迅速发展,在当今的软件开发领域,Web应用的开发已经成为一种非常重要的技术需求。而Java作为一种广泛应用的编程语言,其在Web开发领域也有着重要的地位。JavaWeb开发技术栈涉及多项技术,如JavaEE、Servlet、JSP、Spr

Servlet 容器揭秘:深入了解 Servlet 运行环境 Servlet 容器揭秘:深入了解 Servlet 运行环境 Feb 19, 2024 pm 01:00 PM

Servlet容器是提供Servlet运行环境的应用程序,它负责管理Servlet的生命周期、提供必要的WEB服务,如安全性、事务等。Servlet容器有很多种,其中最常见的是Tomcat和Jetty。Servlet容器主要功能生命周期管理:Servlet容器负责管理Servlet的生命周期,包括启动、初始化、服务和销毁。Web服务:Servlet容器提供web服务,如安全性、事务等。资源管理:Servlet容器管理资源,如Servlet、jsP、html页面等。类加载:Servlet容器负责加

Java错误:Servlet错误,如何解决和避免 Java错误:Servlet错误,如何解决和避免 Jun 25, 2023 pm 06:34 PM

JavaWeb应用程序开发中,Servlet是非常常用的技术。但是在开发过程中难免会出现一些Servlet错误,如何解决和避免Servlet错误成为许多Java开发者的头等问题。本文将根据个人经验和相关资料介绍一些常见的Servlet错误及其解决方法。ClassNotFoundException当我们尝试加载一个类的时候,如果该类不存在或者不能被系统访问,

See all articles