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的配置,有利于在遇到问题时,更准确、更快速的解决问题。

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

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

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://JAVA.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>springMVC</display-name> <welcome-file-list> <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-mybatis.xml</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <context-param> <param-name>webAppRootKey</param-name> <param-value>keshe_C12_09.root</param-value> </context-param> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </listener-class> </listener> </web-app>
最新发布
07-16
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值