webSphere和TomCat的区别.doc_第1页
webSphere和TomCat的区别.doc_第2页
webSphere和TomCat的区别.doc_第3页
webSphere和TomCat的区别.doc_第4页
webSphere和TomCat的区别.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(一)JSP的中文乱码问题 其根源在于:Web容器(Tomcat)默认的字符处理编码是iso-8859-1,对于需要在浏览器页面上显示中文的JSP程序, 但在程序中并没有指定中文的字符集,那么中文将在浏览器页面上显示为乱码。当然,前面所说的是指在Tomcat服务器下的,其他服务 器有些不是这样的,比如BEA Weblogic和IBM Websphere是从操作系统中取得默认的编码,然后按该编码来转码所有用户请求.Struts中 文问题有三种:发送请求时的中文问题、处理响应结果的中文问题和国际化资源文件的中文问题。 1. 发送请求时的中文问题 客户机向服务器发送请求时,根据所使用浏览器的不同可能会有不同的编码形式。不过通常情况下在请求到达Web容器前要将之转码, 转成某种固定的编码以方便Web应用的处理。这种问题有三种处理方法: 第一种(针对Tomcat 5 对POST请求有效,GET请求无效,因为Tomcat 5 对POST和GET请求时分别处理的)可以采用设置用户请求对象的编码形式,也就是以HttpServletRequest对象的编码的形式来进行用户请求的转码: /将用户请求转码为GB2312、GB18030、GBK、UTF-8 等型,具体转为什么类型的编码以您的jsp文件的编码方式为准,java、jsp 、js 、css应保持一致的编码方式。这里以GBK为例。 request.setCharacterEncoding(GBK); 第二种(对GET请求有效),可以在Servlet中对用户输入的数据进行转码。Web容器接受到一个请求时,它会将它发往某个处理的Servlet。在Servlet中直接获取用户请求的数据,然后将之转码为需要的格式,例如把数据转换为GBK格式: String username = request.getParameter(username); username = new String(username.getBytes(iso-8859-1”), GBK); 以上两种方法都是很常用的,但第一种是每个页面都要去修改,当JSP页面很多时比较麻烦,第二种就每个发送的数据都要转码,也很麻烦。 第三种,就是采用Filter过滤器方式,将用户的所有请求都通过过滤器进行转码,这种方法就克服了以上两种方法的缺点。代码如下: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException request.setCharacterEncoding(GBK); /response.setContentType(text/html;charset=GBK); chain.doFilter(request, response); 这里转码为GBK过滤器的主要代码,当然还要把这个类要在web.xml文件中部署。 2. 处理响应结果的中文问题 响应的结果包括Servlet、JSP和HTML三种情况,可以通过以下方式设置响应结果编码: 对于Servlet,可以在Servlet中为其设置响应代码类型,代码如下: response.setContentType(text/html;charset=GBK); 也可把这句加到上面的Filter中,如注释掉的部分。 有人说用 response.setCharacterEncoding(GBK); 无效,必须用 response.setContentType(text/html;charset=GBK); 本人没试过。 对于JSP,是比较方便的,只需要在JSP最前部分按如下方式声明: 对于HTML,其和JSP文件基本类似,也是在页面最前部分按如下方式声明: 3. 国际化资源文件的中文问题 一个Struts应用程序中,可以配置多个资源包,无论是Action、ActionForm还是JSP都可以访问这些包中的资源。资源包就是由扩展名为.properties的文件组成的一组具有相同前缀的文件,如ApplicationResources_zh_CN.properties、ApplicationResources_perties和ApplicationRperties。这些文件就构成一个Struts的资源包,它们都有一个统一的前缀ApplicationResources,凡是有相同前缀的资源文件就都属于一个包。 当用MyEclipse编写资源文件时,默认是不能保存中文的,因为默认保存编码的格式是ISO-8859-1,这就需要修改为gb2312或者gbk编码格式。Windons -Preferences-General -Content Types-Text-Java Properties File,在最下方把其Default encoding改为UTF-8”,然后update”就可以保存中文了。但就这样保存的中文还是不能够在页面上使用的,因为Web容器默认是使用ISO-8859-1,也就会把中文用ISO-8859-1的格式发送给客户页面,显示的还是乱码,这就是JAVA国际化的问题。JAVA是支持unicode编码格式的,unicode是国际统一通用编码,所以不管什么格式的编码转化为unicode编码肯定不会显示乱码的。这个时候就是需要把资源文件的UTG-8编码格式转化为unicode编码格式,而SUN公司又提供了这样的一种工具。在JDK的安装目录bin下,有一个叫native2ascii可执行文件,这个是专门来进行资源文件转码的。打开cmd,进入JDK的bin目录下,把资源文件拷贝到该目录下,执行该命令。比如: native2ascii encoding GBK ApplicationRperties ApplicationResources_zh_CN.properties 就是把GBK编码格式ApplicationRperties转化为unicode编码格式ApplicationResources_zh_CN.properties,这样显示页面时就不会出现乱码了。(二)Websphere 默认的字符处理编码要看 : 管理控制台-服务器-应用程序服务器-server1-java和进程管理-进程定义-java虚拟机-通用jvm参数 的设置了,如为,-Dfile.encoding=GB2312 -Dclient.encoding.override=GBK 则是GBK。 我们可以通过如下判定: 用ieHTTPHEADERS 等工具查看POST请求中的请求参数,汉字是经过Encoding的(是按哪种字符集编码要看jsp文件的编码方式了), 由 % 间隔的十六进制数组成,如下 jsp文件的字符集是UTF-8,form 表单提交,用ieHTTPHEADERS 工具查得请求参数为: =struts.token&struts.token=HPADE1CXRJ0PASL2V7RQFVXJLLFB1OUE&ptoId=244& orgName=%E7%BB%84%E7%BB%87%E5%90%8D%E7%A7%B0&orgId=&oscId=&oscType=H1&ptoType=01&impDate=2009-06-16 &details=%E5%85%B7%E4%BD%93%E6%83%85%E5%86%B5 orgName=%E7%BB%84%E7%BB%87%E5%90%8D%E7%A7%B0 经UTF-8 编码的,其中文对应的是组织名称 ,E7BB84 是组的十六进制表示, E7BB87 是织的十六进制表示等。 form表提交后,在ACTION中查看 组织名称 变为乱码: 缁勭粐鍚嶇 通过以下代码分析: String JinZhi16 = Integer.valueOf(E7,16).toString(); / 把E7 转为十进制,这里JinZhi16 = 231 ,BB 对应的十进制:187 System.out.println(JinZhi16 = +JinZhi16); / 这里的231、187,132等都是通过Integer.valueOf(E7,16).toString()分别把对应的E7、BB、84 等转过来的十进制数字。 byte bt = new byte(byte)231,(byte)187,(byte)132,(byte)231,(byte)187,(byte)135,(byte)229,(byte)144,(byte)141,(byte)231,(byte)167,(byte)176; System.out.println(GB18030 = +new String(bt,GB18030); System.out.println(GBK = +new String(bt,GBK); System.out.println(UTF-8 = +new String(bt,UTF-8); String aa = new String(bt,GB18030); System.out.println(GBK = +new String(aa.getBytes(GBK),UTF-8); String encoding=System.getProperty(file.encoding); System.out.println(Default System Encoding: + encoding); 输出内容: JinZhi16 = 231 GB18030 = 缁勭粐鍚嶇 GBK = 缁勭粐鍚嶇 UTF-8 = 组织名称 GBK = 组织名称 Default System Encoding: UTF-8 我们发现:form表单提交 orgName=%E7%BB%84%E7%BB%87%E5%90%8D%E7%A7%B0(即组织名称) 到 ACTION ,是 缁勭粐鍚嶇 这样的乱码,而 System.out.println(GB18030 = +new String(bt,GB18030); 输出的也为缁勭粐鍚嶇 ,所以可假设其 编码字符集也为GB18030或GBK,用通过System.out.println(GBK = +new String(aa.getBytes(GBK),UTF-8); 得知确为GBK 或GB18030。GB18030是 GBK的超集,他支持3-4字节的编码,不过这两个标准都支持GB2312-80 。 查看WebSphere的 通用jvm参数 的设置了是 -Dfile.encoding=GB2312 -Dclient.encoding.override=GBK 所以最后把-Dfile.encoding=GB2312 -Dclient.encoding.override=GBK 改为 -Dfile.encoding=UTF-8 -Dclient.encoding.override=UTF-8 就可以解决乱码了(对get 和 post 有效)。 修改完上述参数要从起WebSphere的服务,远程登录到安装WebSphere的机器上,你的was发布的ip 就是WebSphere所在的机器, 其用户名和密码同登录到发布was 的WebSphere的控制台一样,因为本来就是同一台机器。登录到WebSphere控制台 ,服务器 应用程序服务器 找到对应的节点名称如 cncaitKaifaNode03 ,在控制面板 - 服务 - 查看以IBM开头的有cncaitKaifaNode03 标识的WebSphere服务,重启。 用如下过滤器不管用。 public class ChartFilter implements Filter private String encoding = UTF-8; public void init(FilterConfig config) throws javax.servlet.ServletException String temp = config.getInitParameter(encoding); encoding = (temp = null) ? encoding : temp; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain ) throws java.io.IOException, javax.servlet.ServletException System.out.println(-过滤器-encoding = +encoding); request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); response.setContentType(text/html; charset=+encoding); chain.doFilter(request, response); public void destroy() (三)共同问题: Tomcat 5 和 webSphere6.1 对get请求,如果有奇数个汉字的参数,则紧接着&的下一参数会追加在这个汉字参数后。如: String url = /cnca/servlet/update.action?orgName=中国船级社质量认证公司&oscYM=2009-06 ,则取得orgName的值 为中国船级社质量认证公oscYM=2009-06,而oscYM 没有取到值。 解决的简单方法就是在 orgName=中国船级社质量认证公司之后 &oscYM=2009-06之前加一个全角空格。 - 程序从tomcat迁移至websphere的修改 1.普通应用部署在websphere上中文乱码问题 解决:管理控制台-服务器-应用程序服务器-server1-java和进程管理-进程定义-java虚拟机-将通用jvm参数设置为: 根据你的jsp java文件的编码是什么而定,如果是UTF-8 则设置为 -Ddefault.client.encoding=UTF-8 -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.region=CN 2.修改h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论