jsp中文乱码问题

来源:互联网 发布:fcn caffe windows 编辑:程序博客网 时间:2024/05/16 11:10

1、JSP页面中文乱码问题
在JSP页面中输出中文时乱码,这是因为字符编码不正确所导致。JSP页面的编码方式有两个地方需要设置:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page contentType="text/html;charset=utf-8"%>

其中,pageEncoding指的是JSP文件本身在本地保存时的编码方式。
contentType的charset指的是服务器发送网站内容给客户端时使用的编码。
解决方案:在JSP页面设置pageEncoding和contentType的charset其中一个为支持中文的编码格式(UTF-8,gbk,gb2312)。设置一个,另一个会默认和它一样。如果两个都设置则最好按照上面的格式进行设置(可以不一样)

从第一次访问JSP页面开始,到这个页面被发送给客户端,这个JSP页面要经过三次编码转换、:
(1)根据pageEncoding的设定字符编码读取JSP生成的Servlet(.java),结果生成的servlet的编码统一使用utf-8,如果pageEncoding设定错了或者是没有设定都会造成中文乱码。
(2)由JAVAC编译指令将Java源码编译为Java字节码,无论读取JSP指定的是什么编码方案,经过这个阶段的结果全部为UTF-8编码的。
JAVAC用UTF-8编码读取Java源码,编译成UTF-8编码的字节码(即class)这是JVM对常数字串在二进制码内的表达规范。
(3)Tomcat载入和执行字节码,根据contentType的设置charset的编码方案向客户端浏览器输出结果。


2、表单提交乱码问题
在JSP页面中提交表单时(用POST或GET方法),使用request.getParameter()方法获取表单控件值时出现乱码。出现这种现象的原因是因为在TOMCAT中处理参数时,采用缺省的字符集为ISO-8859-1,而这个字符集是不包含中文的,所以出现乱码。
可以采用如下方式: 将ISO-8859-1字符编码格式转换为GBK格式。
在提交了中文的地方都采用这种方式来处理。但是这样不符合面向对象的基本设计思想。

 new String(s.getBytes(“ISO-8859-1”),“GBK”);  //s为要转换的字符串变量    

最好方式如下:
在TOMCAT中由于对POST方法和GET方法提交数据处理方式不同,因此解决中文乱码方法也不相同。

对于GET方法提交的表单,要在TOMCAT的HOME主目录中的CONF目录下的server.xml中进行配置。在\conf目录下的server.xml文件中,找到对8080端口进行服务的Connector组件的设置部分,给这个Connector组件添加一个属性 :URIEncoding= “GBK”。修改后的Connector组件的设置代码如下:

<Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443"               URIEncoding="GBK" />  

这样修改后,重启TOMCAT服务器可以正确处理GET访求提交的请求数据了。

POST方法提交的表单数据可以通过编写过滤器的方法解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变请求参数的编码方式。我们只要在过滤器中设置一个命令:

request.setCharacterEncoding("gbk");  
原创粉丝点击