1.解决全站字符乱码(POST和GET中文编码问题)
➢POST请求:
requestsetCharacterEncoding("utf-8")
➢GET请求:
String name = new String(reguest.getParameter("xx").getBytes("is0-8859-1"),“utf-8");
doFilter(name,value);
响应的乱码问题:
response.setContextType('text/htm;charset-=utf-8").
基本上在每个Servlet中都要处理乱码问题,所以应该把这个工作放到过滤器中来完成。
2.编写一个页面
示例:
结果:由于未做任何请求编码处理,测试结果为POST和GET均乱码;
3.添加一个EncodingFilterd过滤器(EncodingFilter.java )
(1) 处理post请求编码问题:
request.setCharacterEncoding ( "utf-8") ;
(2) 处理get请求编码问题:
string usexname= request.getParameter ("usexname" );
username=new string (username.getBytes("ISO-8859-1"),"UTF-8");
调包request;
写一个request的装饰类;
在放行时,使用自己的request;
HttpServletRequest req = (HttpServletRequest)request;
if(req.getMethod().equals("GET")){
EncodingRequest er = new EncodingRequest(req);
chain.doFilter(er,response);
}else if(req.getMethod().equals("POST”)){
chain.doFilter(request,response) ;
}
注释:写一个自己的request的装饰类,实现相同的接口,删除余下码,将这个接口的所有方法用我们的request传递给构造器,只需要覆盖需要的方法。
- 处理编码问题(EncodingRequest.java),需要继承HttpServLetWrapper,通过装饰者模式对getParameter(String name)方法进行加强,这样在获取属性值的时候就会调用重写后的方法,转化成utf-8的格式
public String getParameter(String name){
String value =null;
try{
value = new string (value.getBytes ( "iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException (e) ;
)
return value;
)
}
总结:只需要将EncodingFilter.java和EncodingRequest.java配在web.前面,之后Servlet中就可以解决任何编码问题。