一个简单的字符过滤器的

Filter及FilterChain的使用详解:http://hanlei127a.blog.163.com/blog/static/27078345201232435017245/

过滤器就是拦截了请求和响应操作,并加一些操作处理
字符过滤器:解决中文乱码的问题,在请求和响应时加以字符处理的一些操作


public class CharatorFilter implements Filter{
private String encoding;

public void destroy() {
// TODO Auto-generated method stub
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//解决post方式中文乱码问题
request.setCharacterEncoding(encoding);//这里的encoding参数在web.xml里有配
response.setContentType("text/html;charset="+encoding);//设置响应类型和编码方式
response.setCharacterEncoding(encoding);
//释放请求,过滤垫释放请求和相应,CharatorRequstWapper是针对get方式的提交重写getParameter方法,加入get方式的转码
chain.doFilter(new CharatorRequstWapper((HttpServletRequest) request), response);
}

public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub  这里得到web.xml配置的初始化参数;
encoding = filterConfig.getInitParameter("encoding");

}


下面是CharatorRequstWapper
/**
* 自定义request,重写它的getParameter();重新包装request
* @author kuang
*HttpServletRequestWrapper:这个是HttpServletRequest的实现类
*/
public class CharatorRequstWapper extends HttpServletRequestWrapper{
HttpServletRequest request;

public CharatorRequstWapper(HttpServletRequest request) {
super(request);
this.request = request;
}

@Override
public String getParameter(String name) {
//得到用户提交数据的方式
String method = request.getMethod();
//取得具体的值
String value = super.getParameter(name);
//判断是否是get方式请求
if("get".equalsIgnoreCase(method)){
try {
//把数据做转码处理
value = new String(value.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return value;
}
}


下面是web.xml的配置;
<!--    配置过滤器,放在第一位置,并含有一个参数变量,econding,在过滤器的servlet中这个参数就相当于值utf-8-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.rshz.l10.filter.CharatorFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>拦截所有请求
</filter-mapping>

猜你喜欢

转载自jeff88.iteye.com/blog/2328237
今日推荐