javaweb过滤器

实现对web资源请求的拦截,完成特殊的操作,尤其是对请求的预处理。

1、过滤器的实现步骤

编写java类实现Filter接口,并实现其doFilter方法。

自动生成以下代码

package Filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class characterFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {
		// TODO Auto-generated method stub

	}

}

doFilter过滤器的功能实现方法

init初始化时运行的方法

destroy过滤器销毁时的后期处理

doFilter方法中最后应该有  chain.doFilter(request, response); 

chain为过滤器链,在doFilter结束后执行此话,代表本过滤结束进入下一个过滤器或执行操作。

2在web.xml文件中对filter类进行注册,并设置所拦截的资源。

1、注册过滤器

2、拦截映射配置

在web-app中配置

  <filter>
  	<filter-name>characterFilter</filter-name>   <!-- 过滤器名称 -->
  	<filter-class>Filter.characterFilter</filter-class>  <!-- 过滤器地址 -->
  </filter>
  
  <filter-mapping>
  	<filter-name>characterFilter</filter-name>  <!-- 哪个过滤器起作用 -->
  	<url-pattern>/*</url-pattern>    <!-- 对什么请求进行过滤,,/*代表所有的请求 -->
  </filter-mapping>

3、配置并获取过滤器的初始化参数

1、设置初始化参数

在web.xml中的web-app中filter中配置

  	<init-param>
  		<param-name>systemName</param-name>
  		<param-value>character Encoding</param-value>
  	</init-param>
  	<init-param>
  		<param-name>version</param-name>
  		<param-value>1.0</param-value>
  	</init-param>

param-name:参数名

param-value:参数值

2、获取初始化参数

在Filter类中添加FilterConfig属性的变量

    private FilterConfig filterConfig;

得到filterConfig的set和get方法

    public FilterConfig getFilterConfig() {
		return filterConfig;
	}

	public void setFilterConfig(FilterConfig filterConfig) {
		this.filterConfig = filterConfig;
	}

在init方法中获得传进来的FilterConfig并传给类属性

this.filterConfig=filterConfig;

3、使用初始化参数

在doFilter中

String systemName = filterConfig.getInitParameter("systemName");

获取参数值

3、doFilter代码编写      功能:字符编码的过滤

在web.xml中的web-app中filter中配置

    <init-param>
  		<param-name>charset</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>

doFilter中加入

request.setCharacterEncoding(filterConfig.getInitParameter("charset"));

如此在初始化时获得参数,执行时执行doFilter就完成了字符编码的过滤。

其他注意事项,很多情况下需要将request转换成HttpServletRequest类型

		HttpServletRequest hrequest = (HttpServletRequest)request;
		HttpServletResponse hresponse = (HttpServletResponse)response;

filter-mapping配置的子元素dispatcher

当过滤器被调用前还要考虑资源被调用的方式

直接访问页面request方式     不修改dispatcher过滤器默认是request

include     jsp中

forword    页面转换

error     错误信息

可以配置多个dispatcher

原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232620.html