Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜。
估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet和filter中的url-pattern还是有一些文章在里面的,总结了一些东西,放出来供大家参考,以免遇到问题又要浪费时间。
一、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技术在J2EE开发中扮演着至关重要的角色,它是Java服务器端编程的核心组件,用于接收和处理来自客户端(如浏览器)的HTTP请求,并生成响应返回给客户端。本帮助文档旨在提供一个超详细且易懂的教程,帮助初学...
其中,Servlet是J2EE中最基础的服务器端组件之一,主要用于处理HTTP请求。 **Servlet简介** Servlet是Java编程语言中用来扩展Web服务器功能的接口,由Sun Microsystems(现在已被Oracle公司收购)官方提供。Servlet...
《企业级servlet 和J2EE》是一份深入探讨企业级Web应用开发的资源,主要聚焦于Java平台上的Servlet和J2EE技术。Servlet是Java编程语言中的一个接口,用于扩展服务器的功能,尤其是在Web服务器中处理HTTP协议。而J2EE...
在Java企业级应用(J2EE)开发中,Filter(过滤器)是核心组件之一,它扮演着请求处理的预处理器和后处理器角色。Filter提供了一种机制,可以在请求被Servlet处理之前或者之后进行拦截、修改,甚至拒绝请求。这种...
J2EE项目开发中常用的jar包往往涵盖了一系列的核心技术和框架,这些库支持着应用程序的构建、部署和运行。下面我们将详细探讨一些常见的J2EE项目中使用的jar包及其作用。 1. **Servlet API**:servlet-api.jar是...
J2EE开发中遇到的乱码问题是一个常见的困扰,尤其是在处理中文字符时。本文将详细介绍如何解决这些问题,以一个基于Eclipse 3.3 + MyEclipse 6.0 + Tomcat 5.5的项目为例,该项目采用了Ext、Struts和Hibernate框架。...
数据库访问技术是J2EE开发中不可或缺的部分,课程涵盖了JDBC的工作原理,如何通过JDBC执行SQL语句,以及数据源和数据库连接池的应用。此外,课程还引入了轻量级框架,如Struts、Spring和Hibernate,讲解MVC设计模式...
**J2EE&Servlet API 帮助文档详解**...无论是Servlet的请求处理、过滤器机制,还是J2EE中的各种企业服务,都是Java开发者必备的知识点。通过深入学习这些内容,开发者可以创建出高效、可靠且易于维护的企业级应用程序。
【标题】"j2EE Servlet API" 在Java世界中,J2EE(Java 2 Platform, Enterprise Edition)是一个用于开发和部署企业级应用...在实际开发中,还需要配合Filter、Listener等其他组件,以实现更复杂的逻辑和优化性能。
总之,J2EE Servlet 2.5为开发者提供了强大的Web应用程序开发能力,其丰富的特性和API使得开发者能够构建出高性能、可扩展的企业级应用。对于J2EE初学者来说,深入理解Servlet 2.5规范,掌握上述知识点,是迈向专业...
除了上述核心组件,J2EE还包括Web服务(如JAX-WS和JAX-RS)、JavaMail API、Java Servlet Filter和Listener、Java Authentication and Authorization Service (JAAS)等。这些技术共同构建了强大且灵活的开发环境,...
Filter 在 J2EE 中的工作原理是基于拦截机制的,它会在请求到达目标资源(如 Servlet)之前以及响应离开应用程序之前执行特定的操作。通过在 web.xml 中配置,我们可以指定哪些 URL 需要经过 Filter 处理。当一个...
【标题】"j2EE Servlet" 是一个与Java企业版(Java Enterprise Edition,简称J2EE)中的Servlet技术相关的主题。Servlet是Java编程语言中用于动态处理Web请求的一种核心组件,它扩展了Web服务器的功能,使得服务器...
10. **Filter和Listener**:在Servlet容器中,Filter用于拦截请求和响应,进行预处理或后处理,而Listener则监听特定事件,如会话创建、销毁等。 通过分析压缩包中的源代码和实例,我们可以对这些技术有更深入的...
Servlet技术是构建Web应用程序的核心技术之一,特别是在Java Web开发领域。 ### Servlet生命周期 - **初始化**:当Servlet首次被加载时,容器会调用`init()`方法进行初始化。 - **服务处理**:客户端发送请求后,...
在Java企业级应用开发中,J2EE(Java 2 Platform, Enterprise Edition)提供了一种强大的组件模型,其中过滤器(Filter)是关键组件之一。本文将深入解析J2EE过滤器Filter的使用方法,并通过实例来阐述其工作原理。 ...
在J2EE开发中,面试官常常会关注开发者对于核心概念的理解和技术的熟练掌握程度。以下是一些关于J2EE的常见面试问题及其详细解答: 1. **事务控制**: 事务控制是数据库操作的核心机制,确保了数据的一致性和完整...
掌握基本的Servlet知识后,可以进一步学习MVC框架(如Spring MVC)、Filter、Listener、Session管理、Cookie操作、异常处理、JSP和Servlet的协作等内容,提升Web开发能力。 总之,"J2ee servlet入门例子"是一个理想...
为了提高项目的可维护性、可读性和一致性,J2EE开发过程中遵循一定的命名规范是非常重要的。 #### 二、项目开发顺序及要点 在进行J2EE项目开发时,通常会遵循以下步骤: 1. **建立界面原型**:首先创建界面的草图...
50 4.2 开发和部署一个简单的Servlet 51 4.3 Servlet常用API介绍 53 4.3.1 Servlet实现相关 54 4.3.2 Servlet配置相关 54 4.3.3 Servlet异常相关 55 4.3.4 请求和响应相关 55 4.3.5 会话跟踪 56 4.3.6 Servlet上下文...