`

Web应用部署描述符(Deploy Descriptor)中Filter的执行顺序

 
阅读更多

J2EE Web应用的部署描述符DD对于Web开发人员通常都不会陌生,不过某些细节的问题,不好好研究一下Servlet的规范,就可能有些模糊了。

今天遇到个问题:当一个被请求的Web资源符合多个Filter配置的mapping规则时,这些Filter执行的顺序是怎样的?是根据filter标签本身在web.xml中定义的顺序执行,还是根据filter-mapping标签在web.xml中定义的顺序执行呢?

 

这个问题网上很多人的说法非常模糊,并没有清楚区分两者的顺序区别(其实在绝大部分场景中,两者的顺序通常是一致的)。终于在Sun当年给出的web.xml的XSD文件中,找到问题比较清楚的说明。

  <xsd:complexType name="filter-mappingType">
    <xsd:annotation>
      <xsd:documentation>

	Declaration of the filter mappings in this web
	application is done by using filter-mappingType.
	The container uses the filter-mapping
	declarations to decide which filters to apply to a request,
	and in what order. The container matches the request URI to
	a Servlet in the normal way. To determine which filters to
	apply it matches filter-mapping declarations either on
	servlet-name, or on url-pattern for each filter-mapping
	element, depending on which style is used. The order in
	which filters are invoked is the order in which
	filter-mapping declarations that match a request URI for a
	servlet appear in the list of filter-mapping elements.The
	filter-name value must be the value of the filter-name
	sub-elements of one of the filter declarations in the
	deployment descriptor.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="filter-name"
		   type="javaee:filter-nameType"/>
      <xsd:choice minOccurs="1" maxOccurs="unbounded">
	<xsd:element name="url-pattern"
		     type="javaee:url-patternType"/>
	<xsd:element name="servlet-name"
		     type="javaee:servlet-nameType"/>
      </xsd:choice>
      <xsd:element name="dispatcher"
		   type="javaee:dispatcherType"
		   minOccurs="0" maxOccurs="4"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>
这里主要看上面的documentation部分的描述,可以看到, filter的触发顺序是按照filter-mapping的定义顺序执行的,而并非filter定义在web.xml中的顺序。

 

分享到:
评论

相关推荐

    WebDeploy远程工具.7z

    5. **执行部署**:通过命令行或集成在CI/CD工具中的WebDeploy命令,执行远程部署操作。 6. **验证部署**:部署完成后,检查服务器上的应用程序状态,确保所有文件都已正确更新,数据库迁移顺利完成。 总的来说,...

    在jboss上部署web应用

    在JBoss中部署应用程序相当直观,只需要将部署单元复制到对应的部署目录(例如server/default/deploy)。JBoss会持续监控该目录,一旦发现新文件,就会自动进行部署。部署的文件可以是EJB JARs、Web应用WARs、企业...

    WebDeploy_amd64_zh-CN.msi发布工具

    WebDeploy,全称为Microsoft Web Deploy,是一款由微软公司开发的强大的自动化部署工具,主要用于简化和加速Web应用程序在IIS(Internet Information Services)服务器上的发布过程。该工具特别适用于开发者和系统...

    WebDeploy_amd64_zh-CN.zip

    描述中提到的"up博客"可能是指某个特定的博客资源,提供了关于WebDeploy的使用教程和技巧。用户可以结合这个博客,学习如何配置WebDeploy规则,设置部署参数,以及解决可能出现的问题。 ### 免费资源的获取 虽然...

    Go-go-deploy基于SVN的web集群一键部署工具

    《Go-go-deploy:基于SVN的Web集群高效部署利器》 在现代互联网环境中,快速且稳定的Web服务部署是每个团队的核心需求之一。Go-go-deploy是一款专为解决这一问题而设计的工具,它利用了Go语言的高效性能和SVN...

    webdeploy的部署手册.pdf

    Web Deploy,也称为Web Deploy工具,是Microsoft提供的一款强大的部署工具,主要用于简化和自动化IIS Web服务器的应用程序部署。在本文中,我们将深入探讨如何启用Web Deploy以及如何使用命令行进行本地和远程部署。...

    net-web打包部署

    在IT行业中,Web应用的打包部署是开发流程中的重要环节,它涉及到将开发完成的Web应用程序转换为可运行状态,并将其发布到服务器上供用户访问。"net-web打包部署"通常指的是针对基于.NET框架的Web应用程序进行的打包...

    WebDeploy_amd64_zh-CN

    WebDeploy不仅仅让你发布文件—还可以部署数据库结构/数据,运行变更的数据库脚本,设置安全访问控制列表等等。所有这些部署步骤都可以用VisualStudio自动完成。 Web部署工具可简化IISweb服务器、Web应用程序和网站...

    解决.NET(WebApplication)安装部署的不能选择安装路径的

    .NET Web应用程序的安装部署通常通过ASP.NET的Web部署项目(Web Deploy Package)或者使用ClickOnce技术来实现。在默认情况下,这些部署方式可能不允许用户在安装过程中选择自定义的安装路径,这可能会对某些需要...

    提供一个《在Tomcat部署和发布Web应用》的入门教程

    一个标准的Web应用通常包含以下几个部分:Web-INF目录,其中包含web.xml(部署描述符),classes目录(存放编译后的Java类),以及lib目录(存放依赖的JAR文件)。此外,还有HTML、CSS、JavaScript等静态资源文件,...

    WebDeploy_x64.msi

    当时自己安装vs2012时 webdeploy3.0安装失败了 自己在搞了半天才找到这个 希望对大家有用吧

    在Glassfish上部署web应用

    在本文中,我们将深入探讨如何在Glassfish服务器上部署Web应用程序。Glassfish是一款开源的应用服务器,主要用于运行Java EE(现在称为Jakarta EE)应用程序,包括Web应用程序和企业级Java组件。 首先,对于Java EE...

    DELPHI7里边的WEB DEPLOY

    DELPHI7中的Web Deploy,全称为Web Deployment Tool,是一个强大的解决方案,用于简化Delphi开发的应用程序部署过程。在Delphi 7这个经典的版本中,开发者可能会遇到各种部署上的问题,比如应用程序与目标系统间的...

    Visual Studio Web部署技术

    Visual Studio 2010 引入了 web.config 转换功能,使得能够基于一个主 web.config 文件,在不同环境中应用特定的定制化设置。 - **转换工作原理**:通过在主 web.config 文件中使用特殊的 XDT (XML Document ...

    Visual Studio Web部署(本地发布到远程IIS).zip

    对于使用Visual Studio的开发者而言,这一过程变得相对简单,因为Visual Studio提供了一整套强大的Web部署工具,可以帮助我们轻松地将Web应用发布到远程的IIS(Internet Information Services)服务器上。...

    NET5Jenkins_Bat Deploy IIS Web.rar

    标题 "NET5Jenkins_Bat Deploy IIS Web.rar" 暗示了这是一个关于使用.NET 5、Jenkins和批处理脚本(Bat)来自动化部署IIS Web应用程序的资源包。描述简单明了,与标题一致,进一步确认了这是关于自动化部署流程。 ...

Global site tag (gtag.js) - Google Analytics