装饰器处理get和post请求解决中文
装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责。用一句话总结就是:保持接口,增强性能。
/**
* 给request.getParamter赋予一个将iso-8859-1的编码转换为utf-8
* @author zengxin
*
*/
public class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public MyRequest(HttpServletRequest request) {
super(request);//让父类调用传达进来的request
this.request = request;
}
//重写request.getParameter("")方法
@Override
public String getParameter(String name) {
String value = request.getParameter(name);
if("get".equalsIgnoreCase(request.getMethod())){
try {
//将tomcat的iso-8859-1编码格式的字节转换为utf-8
value = new String(value.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return value;
}
}
filter当行后,将携带自定义的request给servlet使用
public class CharacterFilter implements Filter{
private String enconding ;//编码格式
@Override
public void init(FilterConfig filterconfig) throws ServletException {
enconding = filterconfig.getInitParameter("enconding");//获取初始化编码格式的值
if(enconding == null || enconding.equals("")){
enconding = "utf-8";
}
}
@Override
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletrequest;//设置request
MyRequest req = new MyRequest(request);//自己定义增强的request
HttpServletResponse response = (HttpServletResponse)servletresponse;//设置response
/*
* request.setCharacterEncoding 只能设置post请求,当get请求无效
*/
//reuqest设置编码格式
req.setCharacterEncoding(enconding);
//response设置编码格式
response.setCharacterEncoding(enconding);
filterchain.doFilter(req, response);
}
@Override
public void destroy() {
}
}
servlet使用MyRequest
public class CharacterServlet extends HttpServlet{
@Override
public void init() throws ServletException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println(req.getParameter("str"));
}
@Override
public void destroy() {
}
}