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容器无法判断。
分享到:
相关推荐
Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.servlet.Servlet接口的init()...
Tomcat启动流程分析 组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 ...分析Tomcat请求过程 ...根据请求地址匹配正确的容器进行处理 ...Servlet容器的实现。
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启动...
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启动...
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启动...
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启动...
Servlet容器和Web工作者伪造的HttpServer基于路径和其他请求属性通过同一路由器处理HttpRequests ,直到匹配处理程序并完成处理为止。 标准浏览器Fetch向诸如Jetty的HttpServer Servlet容器发出请求main UI thread ...
生命周期由servlet容器来控制,然后配置shiro的spring的xml文件,其中主要配置shiro过滤器securityManager、认证成功失败的跳转页面、过滤链、凭证匹配器(hash 还是 sha1等)、自定义的realm、缓存管理器(ehcache...
Web容器: 支持Servlet 3.0规范的容器,如Apache Tomcat7。 数据库:MySQL8.0关系型数据库管理系统。 开发工具:IntelliJ IDEA等集成开发环境。 前端技术: HTML、CSS、JavaScript、Bootstrap等用于构建用户界面。 -...
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....
组件在分布式服务器的组件容器中运行,如Servl et组件在Servlet容器上运行,EJB组件在EJB容器上运行,容器间通过相关的协议进行通讯 ,实现组件的相互调用。遵从这个规范的开发者将得到行业的广泛支持,使企业级应用的 ...
项目可独立运行,无需外部依赖Servlet容器 提供运行时的应用监控 极大地提高了开发,部署效率 与云计算的天然集成 缺点 书籍文档较少,且不够深入 SpringBoot版本 SpringBoot快速...
Javalin,Ktor,Micronaut,Jfinal,Solon 等集成样例),支持动态修改权限配置(动态修改配置每个 API 谁有权访问),支持 Websocket ,主流 HTTP 容器 Servlet 和 JAX-RS,支持多种认证策略, JWT, Basic Auth, Digest Auth...
支持 Websocket ,主流 HTTP 容器 Servlet 和 JAX-RS;支持多种认证策略, JWT, Basic Auth, Digest Auth ... 可扩展自定义认证方式;基于改进的字典匹配树拥有的高性能;良好的扩展接口, 样例和文档助急速理解扩展...
scalatra应用程序可在任何Java servlet容器(例如tomcat,jetty和JBoss)上运行 它易于安装,轻巧且快速 导入org.scalatra._ Scala特拉(Scalatra)路线包括 HTTP动词 路线匹配器 路线动作 每个控制器类都应扩展...
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; -(3)根据配置信息决定...
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...
项目入口项目的入口为DispatcherSerlvet的init()方法中,在Servlet 的 init 方法初始化了IOC容器和Spring MVC所依赖的组件项目搭建用户配置application.properties配置application.properties作为配置文件,配置所...
本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。 数据持久层 1、领域对象及映射文件 您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...
支持主流的http容器(servlet和jax-rs)。 支持JWT,基本身份验证,摘要身份验证...可以扩展自定义支持的身份验证方法。 [高性能到期字典匹配树](#Why Is High Performance)。 良好的扩展界面,演示和文档。 较...