问题的原因在于get传值的时候,getParameter方法使用的是ISO8859-1编码,。修改一下此方法
(1)java类1:EncodeRequestWrapper.java
public class EncodeRequestWrapper extends HttpServletRequestWrapper {
private HttpServletRequest request;
public EncodeRequestWrapper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String value = request.getParameter(name);
try {
if(value != null) return new String(value.getBytes("ISO8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return super.getParameter(name);
}
}
(2)java类2:EncodeFilter.java
public class EncodeFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if("GET".equals(req.getMethod())){
EncodeRequestWrapper wrapper = new EncodeRequestWrapper(req);
chain.doFilter(wrapper, response);
}
else{
req.setCharacterEncoding("utf-8");
chain.doFilter(req, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
(3)web.xml配置
<filter>
<filter-name>encodeFilter</filter-name>
<filter-class>com.test.Encode.EncodeFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>