`
vance_sunny
  • 浏览: 7741 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Servlet容器的匹配过程

 
阅读更多
Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。


一、Servlet容器对url的匹配过程:

    当一个请求发送到Servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为Servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做Servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个Servlet匹配成功以后,就不会去理会剩下的Servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:

    1. 精确路径匹配。例子:比如ServletA 的url-pattern为 /test,ServletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配,发现/test正好被ServletA精确匹配,那么就去调用ServletA,也不会去理会其他的Servlet了。

    2. 最长路径匹配。例子:ServletA的url-pattern为/test/*,而ServletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的Servlet来匹配,也就是这里的ServletB.

    3. 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的Servlet.例子:ServletA的url-pattern:*.action

    4. 如果前面三条规则都没有找到一个Servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default Servlet,则容器会将请求丢给default Servlet(什么是default Servlet?后面会讲)。

    根据这个规则表,就能很清楚的知道Servlet的匹配过程,所以定义Servlet的时候也要考虑url-pattern的写法,以免出错。

    对于filter,不会像Servlet那样只匹配一个Servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter.Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。

二、url-pattern详解

    在web.xml文件中,以下语法用于定义映射:

    以“/‘开头和以”/*“结尾的是用来做路径映射的。

    以前缀“*.”开头的是用来做扩展映射的。

    “是用来定义default Servlet映射的。

    剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action

    所以,为什么定义“/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致Servlet容器无法判断。
分享到:
评论

相关推荐

    java-servlet-api.doc

    Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.servlet.Servlet接口的init()...

    apache-tomcat-8.5.50-src.zip

    Tomcat启动流程分析 组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 ...分析Tomcat请求过程 ...根据请求地址匹配正确的容器进行处理 ...Servlet容器的实现。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    walkingkooka-spreadsheet-server:Walkingkooka电子表格的技术不可知服务器抽象

    Servlet容器和Web工作者伪造的HttpServer基于路径和其他请求属性通过同一路由器处理HttpRequests ,直到匹配处理程序并完成处理为止。 标准浏览器Fetch向诸如Jetty的HttpServer Servlet容器发出请求main UI thread ...

    SpringMVC+mybatis-framework-bootstrap

    生命周期由servlet容器来控制,然后配置shiro的spring的xml文件,其中主要配置shiro过滤器securityManager、认证成功失败的跳转页面、过滤链、凭证匹配器(hash 还是 sha1等)、自定义的realm、缓存管理器(ehcache...

    基于SSM框架的《超市订单管理系统》Web项目开发(第三天)用户管理,模糊查询,精准匹配,分页显示数据

    Web容器: 支持Servlet 3.0规范的容器,如Apache Tomcat7。 数据库:MySQL8.0关系型数据库管理系统。 开发工具:IntelliJ IDEA等集成开发环境。 前端技术: HTML、CSS、JavaScript、Bootstrap等用于构建用户界面。 -...

    Spring Boot中文文档.rar

    9.1.Servlet容器 10.安装Spring Boot 10.1.Java Developer的安装说明 10.1.1.Maven安装 10.1.2.Gradle安装 10.2.安装Spring Boot CLI 10.2.1.手动安装 10.2.2.使用SDKMAN安装! 10.2.3....

    健身房管理信息系统设计.doc

    组件在分布式服务器的组件容器中运行,如Servl et组件在Servlet容器上运行,EJB组件在EJB容器上运行,容器间通过相关的协议进行通讯 ,实现组件的相互调用。遵从这个规范的开发者将得到行业的广泛支持,使企业级应用的 ...

    springboot学习思维笔记.xmind

    项目可独立运行,无需外部依赖Servlet容器 提供运行时的应用监控 极大地提高了开发,部署效率 与云计算的天然集成 缺点 书籍文档较少,且不够深入 SpringBoot版本 SpringBoot快速...

    基于RBAC(用户-角色-资源)关注于对API的安全保护,无特定Web框架依赖的一个认证鉴权框架,面向RESTAPI 的认证鉴权

    Javalin,Ktor,Micronaut,Jfinal,Solon 等集成样例),支持动态修改权限配置(动态修改配置每个 API 谁有权访问),支持 Websocket ,主流 HTTP 容器 Servlet 和 JAX-RS,支持多种认证策略, JWT, Basic Auth, Digest Auth...

    面向REST API的高性能认证鉴权框架,致力于管理保护API安全

    支持 Websocket ,主流 HTTP 容器 Servlet 和 JAX-RS;支持多种认证策略, JWT, Basic Auth, Digest Auth ... 可扩展自定义认证方式;基于改进的字典匹配树拥有的高性能;良好的扩展接口, 样例和文档助急速理解扩展...

    scalatra-essentials:Scalatra框架说明

    scalatra应用程序可在任何Java servlet容器(例如tomcat,jetty和JBoss)上运行 它易于安装,轻巧且快速 导入org.scalatra._ Scala特拉(Scalatra)路线包括 HTTP动词 路线匹配器 路线动作 每个控制器类都应扩展...

    Spring面试题

    -(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; -(3)根据配置信息决定...

    java 面试题 总结

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    spring-demo:手写实现Spring核心功能

    项目入口项目的入口为DispatcherSerlvet的init()方法中,在Servlet 的 init 方法初始化了IOC容器和Spring MVC所依赖的组件项目搭建用户配置application.properties配置application.properties作为配置文件,配置所...

    ssh(structs,spring,hibernate)框架中的上传下载

     本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。  数据持久层  1、领域对象及映射文件  您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...

    肯定性:一个简单高效的开源安全框架,专注于保护静态API

    支持主流的http容器(servlet和jax-rs)。 支持JWT,基本身份验证,摘要身份验证...可以扩展自定义支持的身份验证方法。 [高性能到期字典匹配树](#Why Is High Performance)。 良好的扩展界面,演示和文档。 较...

Global site tag (gtag.js) - Google Analytics