package com.gw.web.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
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.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
public class MyFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//强转
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
//处理业务
req.setCharacterEncoding("UTF-8");
//调用
req=new MyRequest(req);
//放行
chain.doFilter(req, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
/**
* 1.要实现与被包装类共同的接口
* 2.定义一个与被包装类相同的对象引用
* 3.定义给一个构造方法将此对象传过来
* 4.对于需要改写的方法进行改写
* 5.对于不需要改写的方法直接调用
*/
//class MyRequest implements HttpServletRequest{
// HttpServletRequest request;
// public MyRequest(HttpServletRequest request){
// this.request=request;
// }
//
//}
class MyRequest extends HttpServletRequestWrapper{
HttpServletRequest request;
public MyRequest(HttpServletRequest request) {
super(request);
this.request=request;
}
@Override
public String getParameter(String name) {
Map<String, String[]> map = getParameterMap();
return map.get(name)[0];
}
@Override
public String[] getParameterValues(String name) {
Map<String, String[]> map = getParameterMap();
return map.get(name);
}
private boolean flag=false;
@Override
public Map<String, String[]> getParameterMap() {
Map<String, String[]> map = request.getParameterMap();
if(flag){
for(Map.Entry<String, String[]> m:map.entrySet()){
String[] values = m.getValue();
for(int i=0;i<values.length;i++){
try {
values[i]=new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
flag=true;
}
return map;
}
}
/*xml的配置
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.gw.web.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*/