Servlet—实现过滤器

一,实现过滤器

    在Servlet中,如果要定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口即可完成。此接口定义了三个方法。

NO

方法描述
1public void init(FilterConfig filterConfig) throws ServletException过滤器初始化时调用,可以通过filterConfig取得配置的初始化参数
2public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws ServletException,IOException完成具体的过滤操作,然后通过FilterChain让请求继续向下传递
3public void destroy()过滤器销毁时使用

    在三个方法中,最重要的是doFilter()方法,此方法定义了ServletRequest,ServletResponse和FilterChain三种参数,其中前两个参数表示,过滤器可以完成对任意协议的过滤操作。FilterChain接口的作用是将用户的请求向下传递给其他过滤器或Servlet执行操作。

    FilterChain接口定义的方法

NO方法描述
1public void doFilter(ServletRequest req,ServletResponse resp) throws IOException,ServletException`将用户请求向下传递给其他过滤器或Servlet

    在FilterChain接口中,定义了一个同样的doFileter()方法,因为在这一过滤器之后有可能还有其他过滤器,也可能是请求的最终目标Servlet。这样就通过FilterChain形成了一个“过滤链"。

public class FilterDemo implements Filter {
	
	public void init(FilterConfig config) throws ServletException {
		String initParam = config.getInitParameter("ref") ;
		System.out.println("过滤器初始化,初始化参数:"+initParam) ;
	}
	public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws ServletException,IOException{
		System.out.println("执行doFilter()方法之前") ;
		chain.doFilter(req,resp) ;
		System.out.println("执行doFilter()方法之后") ;
	}
	public void destroy() {
		System.out.println("过滤器销毁") ;
	}
}

    web-xml文件配置

<filter>
		<filter-name>FilterDemo</filter-name>
		<filter-class>org.panda.filterdemo.FilterDemo</filter-class>
		<init-param>
			<param-name>ref</param-name>
			<param-value>Hello World</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>FilterDemo</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

    过滤器的初始化方法是在容器启动时就加载的,并且通过FilterConfig的getInitParamter()方法取得了初始化参数。

二,过滤器的应用

    1,编码过滤

    为所有的页面设置统一的请求编码

public class EncodingFilter implements Filter {
	private String charSet ;							//设置字符编码
	public void destroy() {
		System.out.println("过滤器销毁") ;
	}
	public void init(FilterConfig config) throws ServletException {
		this.charSet = config.getInitParameter("charset") ;		//取得初始化参数
	}
	public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain) throws ServletException,IOException{
		resp.setCharacterEncoding("this.charSet") ;		//设置统一编码
	}
}


    

    

转载于:https://my.oschina.net/bugkiller/blog/631575

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值