博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用过滤器解决JSP页面的乱码问题
阅读量:4973 次
发布时间:2019-06-12

本文共 3079 字,大约阅读时间需要 10 分钟。

乱码详情
 总结:讨论了使用GET和POST方法,控制台和JSP页面显示的问题。
最终发现:在servlet或者过滤器中添加:
request.setCharacterEncoding("utf-8");
        res.setContentType("text/html;charset=utf-8");
 即可解决页面显示乱码问题。
 
JSP页面中
<%@ page language="java"    pageEncoding="UTF-8"%>
Insert title here
//选择GET或者POST提交
 
    

 

 
 
过滤器页面:  
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)                   throws IOException, ServletException {             HttpServletRequest req = (HttpServletRequest) request;             HttpServletResponse res = (HttpServletResponse) response;                   //放行!!!——————————————————————             chain.doFilter(newRequest, res);                   }
编写的servlet的get方法中:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      String str=request.getParameter("text");      if(str!=null)System.out.println(str);      response.getWriter().write(str);      }

 

 

 
我们在过滤器中注释掉

//req.setCharacterEncoding("utf-8");

// res.setContentType("text/html;charset=utf-8");

 
控制台显示
JSP页面显示
GET
你好啊 
???
POST
你好å 
:浣犲ソ鍟�
 
在filte过滤器加上:
request.setCharacterEncoding("utf-8");
        res.setContentType("text/html;charset=utf-8");
 
 
 
控制台显示
JSP页面显示
GET
你好啊 
你好啊
POST
你好啊 
你好啊
 
 
这里JSP页面出现乱码是因为:在getParameter()方法中,得到的字符串是乱码的。
 
在Filter中:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        HttpServletRequest req = (HttpServletRequest) request;        HttpServletResponse res = (HttpServletResponse) response;            //放行!!!——————————————————————//                EnhanceRequest newRequest=new EnhanceRequest(req);    //      req.setCharacterEncoding("utf-8");    //    res.setContentType("text/html;charset=utf-8");        System.out.println("filtering");        chain.doFilter(newRequest, res);            }

 

使用装饰者模式,增强getParameter().
小插曲:  装饰者模式:
增强类与被增强类实现统一接口。
增强类中传入被增强的类
需要增强的方法重写。
之后在Filter中增强req:
class EnhanceRequest extends HttpServletRequestWrapper {      private HttpServletRequest request;      public EnhanceRequest(HttpServletRequest req) {             super(req);             this.request=req;      }      //对getParameter增强      @Override      public String getParameter(String name) {             String parameter =request.getParameter(name);//乱码             try {                   parameter=new String(parameter.getBytes("iso8859-1"),"UTF-8");             } catch (UnsupportedEncodingException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();             }             return parameter;      }      }

 

 
控制台显示
JSP页面显示
GET
???
???
POST
你好啊
???
 
同时发现:当JSP页面中去除掉这条代码
contentType="text/html; charset=UTF-8",将造成JSP页面显示数据为乱码。
结论:要解决JSP页面和控制台的乱码问题,只要
在filter过滤器加上:request.setCharacterEncoding("utf-8");
        res.setContentType("text/html;charset=utf-8");
或者就在servlet页面上添加:
request.setCharacterEncoding("utf-8");
        res.setContentType("text/html;charset=utf-8");
 便可解决POST和GET方法的乱码问题。
 
 
 
 
 

转载于:https://www.cnblogs.com/patatoforsyj/p/9983046.html

你可能感兴趣的文章
如何实现网页分享到微信,微博,空间
查看>>
二维几何常用运算
查看>>
POJ 1904 King's Quest (强连通分量+完美匹配)
查看>>
webstorm预览时把浏览器地址localhost改成IP
查看>>
Oracle单机Rman笔记[5]---脱机异地还原
查看>>
php无缝连接滚动
查看>>
MR案例:多文件输出MultipleOutputs
查看>>
拦截器的四种拦截方式以及Filter的执行顺序(17/4/8)
查看>>
自己实现线程池
查看>>
无法加载 Parallels 驱动器
查看>>
登录后跳转到登录前的页面
查看>>
为什么在进行Full GC之前最好进行一次Minor GC
查看>>
atom常用快捷键-mac亲测
查看>>
一个小玩具:NDK编译SDL的例子
查看>>
代码面试之串(转载)
查看>>
基于TCP协议的项目架构之Socket流传输的实现
查看>>
【转】Python读取PDF文档,输出内容
查看>>
C#小知识点记录,对象的深拷贝
查看>>
Linux C Socket编程:文件上传
查看>>
The wealthiest/richest men in the world
查看>>