javaweb后台接收中文乱码。 javaweb后台接收中文乱码。 javaweb后台接收中文乱码。 javaweb后台接收中文乱码。 javaweb后台接收中文乱码。 加一个编码过滤器。
package cn.itcast.goods.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Map.Entry;
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;
/**
* 处理整个web应用全站乱码
* 1)处理请求参数乱码
* 2)处理响应正文乱码
* @author RoySun
*
*/
public class MixCodeFilter implements Filter{
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
//针对post提交方式,这一句即可处理接收请求中的乱码
request.setCharacterEncoding("utf-8");
/*
*过滤器中处理响应正文乱码,
*所有拦截到的资源的乱码问题都可以解决
*/
response.setContentType("text/html;charset=utf-8");
/*
* 采用装饰者模式,将request对象进行包装,
* 在装饰类中重写getParameter等获取参数的方法
*/
MyHttpServletRequest myRequest = new MyHttpServletRequest(req);
chain.doFilter(request, res);
}
@Override
public void init(FilterConfig onfig) throws ServletException {}
}
//装饰类,对HttpServletRequest类进行装饰,重写获取请求参数的方法
class MyHttpServletRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
//构造方法
public MyHttpServletRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
return this.getParameterValues(name)==null? null:this.getParameterValues(name)[0];
}
@Override
public String[] getParameterValues(String name) {
return this.getParameterMap().get(name);
}
private boolean isEncode=true;
@Override
public Map<String, String[]> getParameterMap() {
if("GET".equalsIgnoreCase(request.getMethod())){//针对get提交方式进行手动编解码
Map<String, String[]> map = request.getParameterMap();
if(isEncode){
for (Entry<String, String[]> entry : map.entrySet()) {
String[] params = entry.getValue();
for(int i=0;i<params.length;i++){
try {
System.out.println("过滤器之前的参数:" + params[i]);
params[i]=new String(params[i].getBytes("iso8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
isEncode = false;
}
return map;
}else{//其余6种提交方式
return request.getParameterMap();
}
}
}
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>cn.itcast.goods.filter.MixCodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>