Servlet/JSP的中文问题

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>

    不过有些时候这个方法并不起作用,可能需要容器的支持吧- -!

    到此位置,介绍了一些比较常用的解决方案,都是我平时的一些经验,不过还有一些有效的解决方案,期待其他朋友提供意见,谢谢:)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值