开发者学堂课程【Filte(过滤器)、Listener(监听器):全站编码问题】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/38
全站编码问题
内容:
一.解决全站字符乱码(POST和GET中文编码问题);
二.编写一个页面;
三.添加一个EncodingFilterd过滤器;
四.处理编码问题
1.解决全站字符乱码(POST和GET中文编码问题)
乱码问题:
➢POST请求:
requestsetCharacterEncoding("utf-8")
➢GET请求:String(reguest.getParameter("xx").getBytes("is0-8859-1"),“utf-8");
l响应的乱码问题:
response.setContextType('text/htm;charset-=utf-8").
l基本:在每个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;
if(req-getMethod () .equals ( “GET")){
EncodingRequest er = new EncodingRequest (req) ;
chain.doFilter(er, response) ;
} else if(req-getMethod ( ) .equals("POST”)){
chain.doFilter (request,response) ;
l 注释:写一个自己的request的装饰类,实现相同的接口,删除余下码,将这个接口的所有方法用我们的request传递给构造器,只需要覆盖需要的方法。
4. 处理编码问题(EncodingRequest.java)
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中就可以解决任何编码问题。