Tomcat中开发WEB程序的中文问题困扰了许多人,网上也有大量讨论解决的方法。本文也准备在此讨论一下这个问题。
中文问题有两个方面:
(1)中文的显示问题
JSP页面:
这个问题只需要在JSP页面中设定如下指令就可以解决:
<%@page pageEncoding="支持中文的编码"%>
Servlet:
在doGet或doPost方法中,利用以下语句(假设HttpServletResponse参数名为response):
response.setContentType("text/html;charset=支持中文的编码");
HTML:
可以在<HEAD>标记中设定
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=支持中文的编码">
</HEAD>
对于支持中文编码的具体选择,很多文章推荐利用GBK,这个当然可以,不过,利用UTF-8要更好一些,因为现在Java类库中为了能够适应国际化的需要,许多字符都是采用UTF-8进行的编码,所以,推荐采用UTF-8。
另外一点需要注意的是,在存储JSP或HTML文件时,一定要保证存储文件的编码格式要与声明的中文编码的格式相同,否则的话会由于文件的实际编码和声明的编码不一至产生乱码。大部分的专业开发工具,比如MyEclipse、Netbeans等等,都会按照文件中声明的编码格式自动存储文件,所以不会有什么问题。但是,如果利用一些简单的工具,比如Windows的记事本,它不会自动按照声明的格式存储文件。在大部分情况下,文件会按照Windows系统默认的编码格式进行存储,即GBK编码。如果声明了UTF-8,这时反而会出现乱码。不过,记事本也支持不同的文本存储编码,只是需要手工指定:使用"文件"->"另存为"菜单,在文件存储对话框最后的“编码”框中选择UTF-8就可以了。
(2)中文参数的接收和传递问题
在WEB中除去要显示中文信息之外,中文信息的接受和传递也是必不可少的。在WEB程序中,用户输入的数据和程序交互的主要方式就是利用HTTP协议的GET方法或POST方法,而用户的数据往往是由浏览器传递给Tomcat,Tomcat再交给WEB程序来处理这些数据。
鉴于这个过程,要保证正确的中文信息接受和传递,首先要保证浏览器中的传递过来的数据要正确,所以,在显示用户界面时,应该要保证在JSP或HTML中设定了正确的字符编码。其实,只要按照问题(1)中的设定,一般都不会有问题。
接下来就是程序中接受中文,此时问题稍稍有些复杂,这是由于在Tomcat不同的版本中,处理GET协议和POST协议的有不同方式造成的。
(A)Tomcat4.x
对于Tomcat4.x版本,它采用相同的方式处理HTTP协议中的get和set方法,所以,要处理这个问题,只需要在WEB程序中接受request参数时,在取出参数之前,在JSP的页面或Servlet的doGet(或doPost)利用如下代码就可以解决中文参数的获取问题:
//该语句一定要位于取出参数值之前!
request.setCharacterEncoding("编码名");
String param=request.getParameter("param");
至于编码名具体采取什么,应按照你的传入数据的JSP页面或HTML页面中的字符编码而定,如果设定的为GBK,则此处也应是GBK,如果是UTF-8,此处也应设为UTF-8。
要想在Tomcat4.x中免掉这个在接受参数前都要进行编码设定的麻烦,可以写一个过滤器Servlet,在它的doFilter方法中的第一行加入request.setCharacterEncoding()这条设置语句,然后让该过滤器监控所有的URL请求,即可直接在WEB程序中接受来自于request中的中文参数。
STRUTS程序:
由于框架封装了对于request参数的获取,所以,要先于框架对request参数进行编码设定,此时使用过滤器是一个好的选择。
(B)Tomcat5.x
在Tomcat5.x中,它采用不同的方式处理GET和POST请求,这时,如果按照上述的设定request的setCharacterEncoding方法,就只能对采用POST方法提交的数据起作用,而对于GET方法,request.setCharacterEncoding则失去了作用。
因此,在Tomcat5.x中,需要单独处理GET方法的请求。如果直接在Apache的网站上下载Tomcat,则其默认的GET参数请求的编码均为ISO-8859-1,所以,要解决这个GET方法的中文问题,就需要在接受GET方式传过来的request中的参数时,首先将该参数转变为ISO-8859-1方式的字节数组,在利用String类的String(字节数组,"编码名称")构造方法,将该参数转变为正确的编码,这里,String构造方法中的"编码名称",应按照传过来数据的JSP或HTML中的编码来设定,如为GBK,则也应设定为GBK,如为UTF-8,也应设定为UTF-8,具体的过程如下:(以UTF-8编码为例)
//p1参数来源于一个编码为UTF-8的JSP页面或HTML页面中的表单元素
String p1=request.getParameter("p1");
//pc中存储了正确的中文字符串
String pc=new String(p1.getBytes("ISO-8859-1"),"UTF-8");
由此可见,处理在Tomcat5.x中的中文有些麻烦,能不能不单独处理GET请求,就象Tomcat4.x中那样,只要设定request就可以解决问题呢?
答案就是修改Tomcat5.x中的config目录中的server.xml文件中的处理GET请求的URIEncoding参数,将该参数的值设置为支持中文的编码即可。在此,还是推荐采用UTF-8作为URIEncoding参数的值。具体的设置方法请参看我的另一篇文章:
让Tomcat支持中文文件和目录
这样,在设置完成后,只要保证存储用户数据表单所在的JSP或HTML设定了和URIEncoding参数一样的编码,就可直接从request参数中获取到GET方法传过来的正确正文信息,无需再次转码。
按照这样的设定,就可以象Tomcat4.x,写一个过滤器来处理所有的POST请求,而GET就无需设定了。
对于Tomcat5.x中的STRUTS程序,设定server.xml文件中URIEncoding参数,然后在WEB程序中添加处理request的编码的过滤器Servlet,是一种相当方便的处理中文的方法,因为此时就无需程序中采用特殊的步骤处理传入的中文参数了。
总结一下:
(1)推荐JSP和HTML的编码都设置为UTF-8;
(2)对于Tomcat4.x,为WEB程序编写一个监控所有URL请求的过滤器Servlet,在doFilter方法中对request参数执行request.setCharacterEncoding("UTF-8");,则在WEB程序中将不受中文问题的困扰,无论你采用什么样的WEB框架。
(3)对于Tomcat5.x,在上述步骤的基础上,只要修改安装目录中的config/server.xml,添加参数URIEncoding,将其设置为UTF-8。
按照上面的设定之后,在JSP或Servlet中取GET或POST过来的数据只需要如下一行常规的代码就可以了:
String p1=request.getParameter("p1");
对于STRUTS,也可以直接使用它在Formbean中存储的表单数据了。
分享到:
相关推荐
涵盖数据库访问技术、Java Web 开发技术、Struts 框架、JavaScript 脚本程序设计、SQL Server 索引选取、Tomcat 与 Java Web 开发技术、计算机技术与应用研究、JSP 中文问题解决方案、数据库系统概论、电子政务研究...
编码问题,导致中文字符写不到数据库中,需要修改Mysql文件夹下 my.ini 文件,默认字符集修改(二处)为utf8 2.初始不了SessionFactory 可能是二级缓存初始化问题,去掉二级缓存即可(在hibernate.配置文件中)(没...
例如,它们可能分析如何利用Servlet容器(如Tomcat)来提高JSP应用的性能,或者讨论如何避免常见的安全问题,如SQL注入和跨站脚本攻击。同时,论文可能还会涵盖最佳实践,如如何有效地组织代码结构,以及如何使用MVC...
由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...
(2)开发工具和所用技术的介绍:在毕业设计论文中,学生需要对所使用的开发工具和技术进行介绍,如MyEclipse、Tomcat、PowerDesigner等,以便让读者了解设计的技术架构。 (3)系统分析:在毕业设计论文中,学生...
此次设计主要采用MyEclipse加Tomcat后台服务器进行,设计过程中页面主要使用JSP技术完成,下面对MyEclipse、Tomcat和MySQL数据库进行简要介绍。 1.3.1.1 MyEclipse MyEclipse,是一个十分优秀的用于开发Java, J2EE的...
描述中提到该系统将采用MVC设计模式,结合Struts和Hibernate框架技术,通过网络实现对客户的全面管理,包括信息管理、反馈信息收集和查询功能。 在这一开题报告中,主要知识点包括: 1. **MVC设计模式**:Model-...
* Java Web 中中文乱码问题的探讨:Java Web 开发中常见的中文乱码问题的解决方案。 微信小程序设计 微信小程序的设计主要涉及到以下几个方面: * 用户前端:使用微信开发者工具开发用户前端,主要涉及到用户界面...
论模块、登录模块、后台管理模块,以下是各个模块的功能介绍: 序号 模块名称 主要功能 1 首页模块 显示博客的 LOGO 信息和主菜单,包括首页的链接, 登录(已登录用户显示后台管理和退出) 分页页显示 Java 分类下...
通过这些测试可以发现并修复潜在的问题,提高系统的稳定性和可靠性。 ##### 6.2 软件测试目的 测试的主要目的是验证系统的功能是否符合预期,同时检查系统的性能、安全性和稳定性等方面是否达到设计要求。 #### ...
Effective Java 中文版是Joshua Bloch所著,介绍了Java开发中的一些最佳实践和常见错误,帮助开发者编写高质量的Java代码。精通 Struts:基于 MVC 的 Java Web设计与开发是孙卫琴所著,介绍了Struts框架的设计和...
孙卫琴的几本书则专注于Java Web开发,如Struts、Hibernate和Tomcat,对于想要深入Web开发的人来说非常有价值。 接下来是C#。Charles Petzold被誉为"Windows编程泰山北斗",他的《C#程序设计》和《C#Windows程序...
- 《C陷阱与缺陷》:Andrew Koenig的书,揭示了C语言中常见的陷阱和问题。 2. **Java语言**: - 《Java编程语言(第三版)》:由Java之父James Gosling撰写,深入浅出地讲解Java语言。 - 《Java编程思想(第2版...
- **《精通Struts》和《精通Hibernate》**:孙卫琴的两本书分别详细介绍了基于MVC的Java Web开发框架Struts和对象持久化技术Hibernate,是Web开发者的必备读物。 - **《Tomcat与Java Web开发技术详解》**:孙卫琴...
此外,孙卫琴的《精通Struts》、《精通Hibernate》和《Tomcat与Java Web开发技术详解》为Java Web开发提供了深入的指南。 在C#领域,Charles Petzold的《C#程序设计》和《c#Windows程序设计》被喻为C#语言的权威之...
- 《精通Struts:基于MVC的Java Web设计与开发》、《精通Hibernate:Java对象持久化技术详解》和《Tomcat与Java Web开发技术详解》:孙卫琴的系列作品,针对Java Web开发的实践指南。 2. **C#**: - 《C#程序设计...
除了这些,文档还提到了Struts、Hibernate、Tomcat、图形编程、Unix、Linux、游戏编程、移动开发等领域的经典书籍,这些书籍都是相应领域专业人士提升技能的重要资料。 这些书籍的推荐列表为学习者提供了系统化的...
在职业生涯中,张龙曾在理光软件研究所担任高级软件研究员及项目经理职务,在文档工作流系统与协同知识解决方案方面积累了丰富的经验,并对敏捷方法论有着深入的理解和应用。 #### 二、技术贡献 - **技术传播者**...