java过滤器有很多用处比如:一些需要过滤器的情况:
(1)认证Filter
(2)日志和审核Filter
(3)图片转换Filter
(4)数据压缩Filter
(5)密码Filter
(6)令牌Filter
(7)触发资源访问事件的Filter
(8)XSLT Filter
(9)媒体类型链Filter
此篇文章用Filter来处理乱码问题
使用Filter步骤处理乱码步骤
1.创建实现Filter接口
2.先在web.xml中做好配置,filter 配置路径/* (放在过滤器的第一个位置)
3.在filter中重写getParameter(使用装饰着设计模式)
4.在filter中, 对request进行加强.
实现Filter接口的EncodeFilter类
package 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;
public class EncodeFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("Filter销毁>>>>>>");
}
//处理post提交乱码
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
//强转
System.out.println("对servlet进行拦截>>>>>>");
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
String method=req.getMethod();
res.setContentType("text/html;charset=utf-8");
System.out.println("这里是filter>>>>>>>>>>>>>>>>>");
System.out.println("对servlet进行释放>>>>>>");
chain.doFilter(req,res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("Filter初始化工作>>>>>");
}
}
装饰者MyFilter.java强化了Parameter()和getParameterValues()方法
package Filter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyFilter extends HttpServletRequestWrapper {
private HttpServletRequest request;
public MyFilter(HttpServletRequest request) {
super(request);
this.request = request;
}
// 重写getParamter方法,处理实现get方式提交时的乱码
@Override
public String getParameter(String name) {
// 如果为请求为Post提交
if (this.request.getMethod().equalsIgnoreCase("post")) {
try {
this.request.setCharacterEncoding("utf-8");
return this.request.getParameter(name);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String value = this.request.getParameter(name);
if (value == null) {
return null;
}
if(this.request.getMethod().equalsIgnoreCase("get")){
try {
value = new String(value.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return value;
}
@Override
public String[] getParameterValues(String name) {
// 如果为请求为Post提交
if (this.request.getMethod().equalsIgnoreCase("post")) {
try {
this.request.setCharacterEncoding("utf-8");
System.out.println("编码设置成功!>>>>>>>>>>>>>>>");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String[] value =this.request.getParameterValues(name);
if (value == null) {
return null;
}
if(this.request.getMethod().equalsIgnoreCase("get")){
try {
for(int i=0;i<value.length;i++){
value[i]= new String(value[i].getBytes("ISO-8859-1"), "utf-8");
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return value;
}
}