截止到上篇文章《Eclipse实现基于JSP的电子会议厅功能(三)》,电子会议厅的功能基本都实现了,但是在上篇文章的截图中,有些页面的内容显示的是乱码,如下图所示。本文基于参考文章,对电子会议厅的功能进行调整,使提交和显示的页面不再出现中文乱码。
参考文章1中对jsp页面的几种乱码情况进行了说明,电子会议厅页面中显示乱码属于其中的表单提交时出现中文乱码的情况(通过调试,在Servlet端获取的内容就是乱码),文章中给出的解决方案是实用getBytes函数进行转换。
虽然电子会议厅程序中每个页面的charset和pageEncoding都设置为GB18030,但是charset设置的是服务器发往客户端展现时的编码,而pageEncoding设置的是jsp页面本身的编码。Tomcat中,对于以post方式提交的表单编码格式默认为ISO-8859-1的编码格式,这种编码格式不支持编码中文,因此会出现中文乱码[1]。
之前参照《Java Web设计实用教程》写电子会议厅功能时就没太在意其中的Servlet代码,只要是从客户端表单提交的内容,形式都是类似下面的形式。当时为了简单,基本上就把所有new String(xxx.getBytes(“ISO-8859-1”))的代码忽略没管,直接使用从request中获取的参数赋值。
...
String title = request.getParameter("title");
affair.setTitle(new String(title.getBytes("ISO-8859-1")));
...
修改班级事务发布中的AffairsAdd进行验证,代码及页面截图如下所示:
...
String title=request.getParameter("title");
String content=request.getParameter("content");
int sortId=Integer.parseInt(request.getParameter("sort"));
affair.setTitle(new String(title.getBytes("ISO-8859-1")));
affair.setContent(new String(content.getBytes("ISO-8859-1")));
...
上述方式可以解决表单提交时的中文乱码问题,因此对电子会议厅功能中的其它表单也进行类似的修正,修正后的代码地址为:https://github.com/guochao2299/electronicchamber/tree/20200905。网上还有其它解决方式,比如使用过滤器等,这里就没有再试了。
后续还会在电子会议厅功能中增加日志功能。
参考文章:
[1]jsp中文乱码六种情况—解决方案,https://blog.youkuaiyun.com/ggrjake25/article/details/96726511
[2]Java Web设计实用教程
[3]jsp中文乱码现象解决办法,https://blog.youkuaiyun.com/qq_40587575/article/details/79818477