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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
* Servlet Filter implementation class EncodingFilter
*/
@WebFilter(filterName="/EncodingFilter",urlPatterns="/*")
//@WebFilter("/EncodingFilter")
public class EncodingFilter implements Filter {
/**
* Default constructor.
*/
public EncodingFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//处理请求乱码
HttpServletRequest httpServletRequest= (HttpServletRequest)request;
HttpServletRequest myRequest=new MyRequest(httpServletRequest);
//处理响应乱码
response.setContentType("text/html;charset=utf-8");
chain.doFilter(myRequest, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
//定义request对象
class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
private boolean hasEncode;
public MyRequest(HttpServletRequest request) {
super(request);
this.request=request;
}
@Override
public Map<String, String[]> getParameterMap(){
//获得请求方法
String method=request.getMethod();
if("post".equalsIgnoreCase(method)){
//post请求
try {
//处理post乱码
request.setCharacterEncoding("utf-8");
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
else if("get".equalsIgnoreCase(method)){
//get请求
Map<String,String[]> parameterMap=request.getParameterMap();
if(!hasEncode){//确保get手动编码逻辑只运行一次
for(String parameterName : parameterMap.keySet()){
String[] values=parameterMap.get(parameterName);
if(values !=null){
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();
}
}
}
}
hasEncode=true;
}
return parameterMap;
}
return super.getParameterMap();
}
@Override
public String getParameter(String name)
{
Map<String,String[]> parameterMap=getParameterMap();
String[] values=parameterMap.get(name);
if(values==null){
return null;
}
return values[0];//取回参数的第一个值
}
@Override
public String[] getParameterValues(String name){
Map<String , String[]> parameterMap=getParameterMap();
String[] values=parameterMap.get(name);
return values;
}
}
编码过滤器
最新推荐文章于 2023-09-15 17:07:34 发布