Servlet/JSP的中文问题是一个老生常谈的问题了,网上似乎也有许许多多的解决方案,其实归根结底就是对中文字符进行编码转换,转换成你需要的编码格式.JSP是建立在Servlet之上的,所以Servlet的中文解决方案也适用于JSP,当然JSP也有它自己的中文解决方案,下面我就先从Servlet开始,把各种解决方案理清楚,这里我使用gb2312编码格式来做演示. Servlet的中文解决方案: 1.直接对获取的中文参数进行编码转换.这是一种比较笨拙的方法,因为如果有许多参数,那么就要对它们依次进行编码转换,但是还是要了解一下.过程是先获得参数值String name = request.getParameter("name");然后对name的值进行编码转换name = new String(name.getBytes("iso-8859-1"), "gb2312");这里new String()的第一个参数是一个转换后的字节码,getBytes()方法获得指定编码格式的字节码,因为网络上一般用iso-8859-1编码格式来传递参数,所以这里使用了它.new String()的第二个参数是要被重建成字符串的编码格式,这里为gb2312.通过这样一个过程,就能解决中文问题,但是很明显,它是比较麻烦的,特别是当有许多参数的时候.当然,你也可以写一个通用方法,来对传入的值进行编码转换. 2.在获取参数前,先对参数进行全局的编码转换.这个方法比第一个要简单多,只需要在获取参数前先调用request.setCharacterEncoding("gb2312");方法,然后再获取参数,此时获取出的参数已经被进行了编码转换,所以无需再自己动手转换.但是必须注意,一定要先调用这个方法,然后再获取参数,如果在调用这个方法以前已经获取了参数,那么再调用这个方法将不起作用. 3.通过过滤器(filter)来进行全局的编码转换.可以写一个过滤器来过滤全局的url访问,并事先对参数进行编码转换,方法也是通过调用request.setCharacterEncoding("gb2312");来实现.不过这个方法也有弊处,因为全局的过滤器本身会对系统性能带来一定的影响,并且有些地方是不需要进行编码转换的,这样也可能造成性能的损耗,不过这取决于你的应用. 4.定义一个抽象类,继承HttpServlet,并覆写service()方法并在其中事先进行编码转换,通过调用request.setCharacterEncoding("gb2312");来实现,然后以后所有的Servlet类都直接继承自这个抽象类,从而达到通用的目的.但是并不推荐使用这个方法. JSP的中文解决方案: 首先要说明,有些朋友说已经设置了<%@ page contentType="text/html; charset=gb2312" pageEncoding="gb2312" %>,但是获取的中文参数还是显示乱码.这里必须清楚,这个设置只对静态文本内的中文数据有效,而对于运行期动态获取的中文参数是无效的. 1.前面说过,因为JSP是建立在Servlet基础上的,所以上面介绍的针对Servlet的4种中文解决方案都适用于JSP. 2.在web.xml中配置<jsp-config>元素,具体摘要: <jsp-config> 包括<taglib> 和<jsp-property-group> 两个子元素。其中<taglib>元素在JSP 1.2时就已经存在;而<jsp-property-group>是JSP 2.0 新增的元素。<jsp-property-group>元素主要有八个子元素,它们分别为: 1.<description>:设定的说明; 2.<display-name>:设定名称; 3.<url-pattern>:设定值所影响的范围,如:/CH2 或 /*.jsp; 4.<el-ignored>:若为true,表示不支持EL 语法; 5.<scripting-invalid>:若为true,表示不支持<% scripting %>语法; 6.<page-encoding>:设定JSP 网页的编码; 7.<include-prelude>:设置JSP 网页的抬头,扩展名为.jspf; 8.<include-coda>:设置JSP 网页的结尾,扩展名为.jspf。 一个简单的<jsp-config>元素配置: <jsp-config> <taglib> <taglib-uri>MyTaglib</taglib-uri> <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location> </taglib> <jsp-property-group> <description>Special property group for JSP Configuration JSP example.</description> <display-name>JSPConfiguration</display-name> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> <page-encoding>gb2312</page-encoding> </jsp-property-group> </jsp-config> 不过有些时候这个方法并不起作用,可能需要容器的支持吧- -! 到此位置,介绍了一些比较常用的解决方案,都是我平时的一些经验,不过还有一些有效的解决方案,期待其他朋友提供意见,谢谢:) |
Servlet/JSP的中文问题
最新推荐文章于 2023-02-17 13:55:16 发布