Servlet规范系列 之 <filter>、<filter-mapping>配置详解

欢迎大家关注本博,同时欢迎大家评论交流,可以给个赞哦!!!

  在Servlet2.x版本中,配置依然是通过web.xml的形式进行配置的,升级到Servlet3.x后,可以依赖注解式方式进行配置。

  本文只对<servlet>、<servlet-mapping>进行分析解释。

  XSD地址

  可以从官方获取web.xml的XSD约束web-app_2_5.xsd,同时web-app_2_5.xsd依赖javaee_5.xsd、jsp_2_1.xsd、javaee_web_services_client_1_2.xsd三个约束,地址如下:

  · http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

  · http://java.sun.com/xml/ns/javaee/javaee_5.xsd

  · http://java.sun.com/xml/ns/javaee/jsp_2_1.xsd

  · http://java.sun.com/xml/ns/javaee/javaee_web_services_client_1_2.xsd

  <filter>、<filter-mapping>配置

  根据XSD约束,整理出<filter>、<filter-mapping>节点内容如下:

<filter>
	<display-name></display-name>		<!-- 0或1个 -->    
	<description></description>			<!-- 0或1个 -->
	<icon>								<!-- 0或1个 -->
		<small-icon></small-icon>		<!-- 0或1个 -->
		<large-icon></large-icon>		<!-- 0或1个 -->
	</icon>
	<filter-name></filter-name>			<!-- 1个 -->
	<filter-class></filter-class>		<!-- 1个 -->
	<init-param>						<!-- 0或多个 -->
		<description></description>		<!-- 0或1个 -->
		<param-name></param-name>		<!-- 1个 -->
		<param-value></param-value>		<!-- 1个 -->
	</init-param>
</filter>
<filter-mapping>						<!-- 1或多个 -->
	<filter-name></filter-name>			<!-- 1个 -->
	<url-pattern></url-pattern>			<!-- <url-pattern>和<servlet-name>任选一个 -->
	<servlet-name></servlet-name>		
	<dispatcher></dispatcher>			<!-- 0或多个 -->
</filter-mapping>

  <filter>、<filter-mapping>详解

  · <filter>

   · <display-name>

    Filter的显示名称,并不参与实际编码。

   · <description>

    Filter的描述信息,并不参与实际编码。

​    对于<display-name>和<description>来说,都是用来描述Filter,尽管是程序运行的非必要元素,但当需要管理的Filter较多时,较好的编写<display-name>和<description>可以使得配置更具有可读性和可维护性,在一些Filter管理工具中可以更加方便的进行管理。

   · <icon>

    为当前Filter指定一个图标,包含<small-icon>、<large-icon>两个子标签,可以定义小、大图标,在一些Filter管理工具中可以通过图标进行辨认。

   · <filter-name>

    指定Filter的名称,这个名称会参与其他配置。

   · <filter-class>

​    配置Filter的具体实现类,该类需要实现Filter接口,并完成init、doFilter、destroy方法的实现。

   · <init-param>

    用来定义参数,包含<description>、<param-name>、<param-value>三个子标签。<description>用于描述配置的信息,<param-name>用于自定参数名,<param-value>用于指定参数值。可以配置多个参数,通过FilterConfig类的public String getInitParameter(String name)获取指定参数、public Enumeration getInitParameterNames()获取所有参数的参数名。

  · <filter-mapping>

   定义Servlet和URL之家的映射。

   · <filter-name>

    已经定义的Filter名称。

   · <url-pattern>和<servlet-name>

    <url-pattern>可以根据通配URL路径对符合条件的请求进行过滤处理。

​    <servlet-name>可以根据指定Servlet处理的请求进行过滤处理,Servlet根据其自身配置的<url-pattern>配置进行过滤。

    Filter和Servlet对于<url-pattern>配置的处理稍有差异,原因在于Servlet针对单一请求只能存在一个Servlet进行处理,Filter存在链式处理,只要<url-pattern>配置满足条件,就会把当前Filter加入到过滤器链中。

    <filter-mapping>中<url-pattern>可以像<servlet-mapping>中的<url-pattern>一样,配置多个<url-pattern>,但是只有最后一个<url-pattern>会其作用。如果需要过滤多个路径时,可以定义多个<filter-mapping>标签,每个<filter-mapping>下分别配置其自身的<url-pattern>。

   · <dispatcher>

    Servlet API 2.4版本规范中在<filter-mapping>中增加了<dispatcher>元素,其有四个可选值:REQUEST、FORWARD、INCLUDE、ERROR。使得Filter将会按照配置过滤处理请求:

      REQUEST:直接从客户端过来的Request。

      FORWARD:通过Forward过来的Request。

      INCLUDE:通过Include过来的Request。

      ERROR:通过过来的Request。

      默认值:如果没有指定任何<dispatcher>元素,默认值是REQUEST。

  总结

​  Filter在日常开发中使用概率还是很高的,实际引用中可能不会涉及到所有标签,但是更充分的了解Filter的配置,有利于在遇到问题时,更准确、更快速的解决问题。

  若文中存在错误和不足,欢迎指正!

本博微信公众号“超哥说码”,欢迎大家订阅,公众号正在完善中,会及时将更优质的博文推送于您!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/securitit/article/details/108088973
今日推荐