当GET请求有中文时,对其编码工作很复杂。 可以通过过滤器的方法,实现其编码的便捷式。 GET请求时需要装饰HttpServletRequest
package cn.itcast.filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class EncodingRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
public EncodingRequest(HttpServletRequest request) {
super(request);
this.request=request;
}
@Override
public String getParameter(String name) {
String value =request.getParameter(name);
try{
value = new String(value.getBytes("iso-8859-1"),"utf-8");
}catch (Exception e) {
// TODO: handle exception
}
return value;
}
}
创建过滤器,过滤中文编码
package cn.itcast.filter;
import java.io.IOException;
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;
public class EncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpServletRequest req = (HttpServletRequest) request;
if (req.getMethod().equalsIgnoreCase("GET")) {
EncodingRequest er = new EncodingRequest(req);
chain.doFilter(er, response); //GET请求时,掉包request
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig fConfig) throws ServletException {
}
}