request 请求
request请求:
post:
request.setCharacterEncoding(“utf-8”);
get(tomcat8和以上的不需要处理):
Stringuname=request.getParameter(“uname”);
uname=new String(uname.getBytes(“ISO-8859-1”),”UTF-8”);
//把传入的中文解码成ISO-8859-1,然后转成utf-8编码
Request.setAttribute(“unmae”,uname);
//把转成utf-8的uname有放到requst中传过去给servlet
response响应:
response.setCharacterEncoding("UTF-8");//告知服务器
response.setHeader("content-type","text/html;charset=UTF-8"); //告知客户端
以上两句可以合并成一句response.setContentType("text/html;charset=UTF-8");
代码
public class CharSetFilter implements Filter {
public void destroy() {
}
// 过滤方法,在这个方法中我们要对请求和响应进行处理
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
resp.setContentType("text/html;charset=UTF-8");
System.out.println("dofilter....");
// 根据不同的情况进行不同的处理
// 请求方式, 服务器版本
String method = req.getMethod();
// 得到服务器版本
String serverInfo = req.getServletContext().getServerInfo(); // Apache Tomcat/8.0.23
if("POST".equalsIgnoreCase(method)){
req.setCharacterEncoding("UTF-8");
chain.doFilter(req, resp);
}else{
int start = serverInfo.indexOf("/");
serverInfo = serverInfo.substring(start+1, start+1+1);
System.out.println(serverInfo);
int version = Integer.parseInt(serverInfo);
if(version<8){
/*String str = req.getParameter("name");
str = new String(str.getBytes("ISO-8859-1"),"UTF-8");*/
MyRequestWrapper myreq = new MyRequestWrapper(req);
chain.doFilter(myreq, resp);
}else{
chain.doFilter(req, resp);
}
}
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
class MyRequestWrapper extends HttpServletRequestWrapper{
HttpServletRequest req = null;
public MyRequestWrapper(HttpServletRequest request) {
super(request);
req = request;
}
@Override
public String getParameter(String name) {
String temp = req.getParameter(name);
if(temp!=null){
try {
temp = new String(temp.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return temp; // 正常的字符串了
}
}