使用过滤器解决get&post请求中文乱码
2019-08-05 / JAVA / 1348 次围观 / 0 次吐槽 /tomcat8.0以上版本
get请求不会有中文乱码问题
post请求会有中文乱码问题
解决方案:设置request.setCharacterEncoding("utf-8"); 这种设置只能在post请求中有效
tomact7以下版本(包括7)
get请求会有中文乱码问题
post请求会有中文乱码问题
解决方案:设置request.setCharacterEncoding("utf-8");
如何解决tomcat7中的get请求中文乱码问题?
两种方法:
1.在server.xml配置URIEncoding="UTF-8"
如果是项目开发完成了,打包成war包,放在tomcat7.0/webapps的时候,修改tomcat/conf/server.xml,在connector中添加 URIEncoding="UTD-8"
如果是开发阶段,在eclipse开发工具的server/tomcat7.0/server.xml配置,添加 URIEncoding="UTD-8"
2.把字符串转回字节码,然后再进行UTF-8编码
String username = request.getParameter("username");
//先还原ISO编码,再转成utf-8编码
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");
对比:改配置server.xml的方式便捷
在server.xml配置URIEncoding是不可以解决post请求的中文乱码问题
post请求的中文乱码问题一定要使用request.setCharacterEncoding("utf-8");
如果有多个POST请求,不可能重复使用request.setCharacterEncoding("utf-8") 来解决
解决方案:写一个编码的过滤器MyEncoding拦截所有请求
public class MyEnCodeingFilter implements Filter{ @Override public void destroy() {} @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest hsr = (HttpServletRequest) request; if(hsr.getMethod().equalsIgnoreCase("get")) {//get //解决get中文乱码 MyRequest myRequest = new MyRequest(hsr); chain.doFilter(myRequest, response);//放行 }else {//post //解决POST中文乱码 request.setCharacterEncoding("utf-8"); chain.doFilter(request, response);//放行 } } } class MyRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; private boolean isEncoding = false;//是否已经utf-8编码 public MyRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public String getParameter(String name) { return getParameterMap().get(name)[0]; } @Override public Map<String, String[]> getParameterMap() { Map<String,String[]> map = request.getParameterMap(); if(isEncoding == true) {//已经UTF-8编码 return map; } //遍历value 改为UTF-8编码 for(Entry<String,String[]> entry : map.entrySet()) { //取数组值 String[] values = entry.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(); } } } isEncoding = true; return map; } }
Powered By Cheug's Blog
Copyright Cheug Rights Reserved.