过滤器需要两步:
1.创建MyFilter implements Filter和EncodingUtil extends HttpServletRequestWrapper
2.在xml文件中添加触发条件
xml代码块如下:
<!-- 编码过滤器filter -->
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.zhm.util.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/* 代表是全部文件都触发
*. do代表只有访问.do的文件才会触发
过滤中文乱码和未登录
//MyFilter类:
// 过滤器
public class MyFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
// 处理中文编码问题
EncodingUtil reqUtil= new EncodingUtil(req);
// reqUtil 处理了 中文编码之后的 request 请求
// 根据是否登录 和操作的路径判断是否拦截
chain.doFilter(reqUtil, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
//EncodingUtil类
// 重写 reqeust 获取数据的方法 getParameter
public class EncodingUtil extends HttpServletRequestWrapper {
// request 走过滤器 要进行编码处理的 request 请求
HttpServletRequest request;
// 构造方法
public EncodingUtil(HttpServletRequest request) {
super(request);
this.request=request;
}
// servlet 中 获取数据 调用的 getParameter 方法
public String getParameter(String name) {
// 处理 通过 name 获取 value 处理 value 属性值 根据 get /post 请求
// 获取客户端的请求方式
String method = request.getMethod();
if("GET".equals(method)){
// get 请求
String newName = request.getParameter(name);// 乱码
if(newName !=null && !"".equals(newName)){
// get 处理中文编码格式处理它
try {
newName= new String(newName.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newName;
}
}
if("POST".equals(method)){
// post 请求
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return super.getParameter(name);
}
}
以上的代码仅供参考,如果运用需要查看是否需要修改