开发过虑器
publicclass CharFilterimplements Filter {
private Stringencoding;
publicvoid init(FilterConfig conf)throws ServletException {
this.encoding=conf.getInitParameter("bmgs");
}
publicvoid doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain)throws IOException, ServletException {
//1:设置请求的编码,以下是支持post
request.setCharacterEncoding(encoding);
//2:同时也设置响应的编码
response.setContentType("text/html;charset="+encoding);
MyRequest req = new MyRequest((HttpServletRequest)request);
chain.doFilter(req, response);
}
publicvoid destroy() {
}
}
上面的代码还可以优化,即当GET请求时包装,是POST就不用包装
publicvoid doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain)throws IOException, ServletException {
//1:设置请求的编码,以下是支持post
request.setCharacterEncoding(encoding);
//2:同时也设置响应的编码
response.setContentType("text/html;charset="+encoding);
HttpServletRequest req = (HttpServletRequest)request;
if(req.getMethod().equalsIgnoreCase("GET")){
request = new MyRequest(request);
}
chain.doFilter(req, response);
}
同时也让它可以处理get的乱码
思想:包装request
//wrapper
class MyRequestextends HttpServletRequestWrapper{
public MyRequest(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String val = super.getParameter(name);
if(val!=null){
try {
val = new String(val.getBytes("ISO-8859-1"),super.getCharacterEncoding());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return val;
}
}
365

被折叠的 条评论
为什么被折叠?



