博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Web Filter 详解
阅读量:2235 次
发布时间:2019-05-09

本文共 3729 字,大约阅读时间需要 12 分钟。

本文转载自:http://www.cnblogs.com/dyllove98/archive/2013/07/24/3212512.html

感谢博主的分享

1.Filter的基本概念

Filter 是java下的一种过滤器,能实现对java web程序在客户端和服务器端之间消息的过滤,也就是在服务器段接受request之前,可以预先对request进行处理,或在客户端接受response之前,对response进行处理。Filter的使用非常灵活,是在“链”到客户端和服务器之间的,在需要时可以配置到客户端与服务器之间,在不需要时可以去掉。filter还可以设置其对发送到哪些页面或从哪些页面发出的消息进行过滤,即是一中横切性的编程,可插拔。

2.Filter的处理流程

实现filter相关的功能,需要实现javax.servlet.jar包下的filter接口,该接口有三个方法,分别是init doFilter,destory方法,把需要执行某些功能的代码放到doFilter方法中。

一个Filter处理一个jsp:

实现filter要实现javax.servlet包下的filter接口,本例子实现的是设置所有jsp也的字符编码。

package com.tgb.drp.util.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * 采用filter统一处理字符集 * */public class CharsetEncodingFilter implements Filter {		private String encodeString;        //Filter注销方法	@Override	public void destroy() {		}        //filter要实现的功能	@Override	public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {		System.out.println("begin");		// 设置字符集		request.setCharacterEncoding(encodeString);				//继续向下执行,如果还有其他filter继续调用其他filter,没有的话将消息发送给服务器或客户端		chain.doFilter(request, response);		System.out.println("end");	}        //初始化方法	@Override	public void init(FilterConfig filterConfig) throws ServletException {		//		encodeString=filterConfig.getInitParameter("encoding");	}}
写好filter类后,需要在配置文件中设置对哪些request和response进行过滤处理,本例子设置对所有的jsp页进行处理,在web.xml的web-app节点下,配置好后,可以写一个jsp页进行测试了。

CharsetEncodingFilter
com.tgb.drp.util.filter.CharsetEncodingFilter
encoding
GBK
CharsetEncodingFilter
*.jsp
多个filter处理一个jsp页

如果想实现多个filter对同一个jsp页进行处理,例如既需要设置字符编码,又需要验证身份,只需要在在写好响应的filter后继续配置在web.xml里。我们继续上面的例子,再写一个验证身份的Filter,命名为AuthenticationFilter,代码如下:

package com.tgb.drp.util.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class AuthenticationFilter implements Filter {	@Override	public void destroy() {	}	@Override	public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {		//控制用户访问权限		HttpServletRequest req=(HttpServletRequest)request;		HttpServletResponse res=(HttpServletResponse)response;		HttpSession session=req.getSession();		if(session.getAttribute("user_info")!=null){			chain.doFilter(request, response);		}else{			res.sendRedirect(req.getContextPath()+"/error.html");		}	}	@Override	public void init(FilterConfig filterConfig) throws ServletException {		}}
然后在配置文件里继续进行下配置,代码如下:

index.html
CharsetEncodingFilter
com.tgb.drp.util.filter.CharsetEncodingFilter
encoding
GBK
CharsetEncodingFilter
*.jsp
AuthenticationFilter
com.tgb.drp.util.filter.AuthenticationFilter
AuthenticationFilter
*.jsp
60
好了到此就可以设置两个filter对一个jsp页进行处理了,当启动tomcat,访问响应的jsp页时,设置的filter就会起作用。

你可能感兴趣的文章
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
决策树的python实现
查看>>
了解 Sklearn 的数据集
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>