tomcat中文的问题

这些天开发一个项目,服务器是tomcat,操作系统是xp,采用的是MVC架构,模式是采用Facade模式,总是出现乱码,自己也解决了好多天,同事也帮忙解决,也参考了网上众多网友的文章和意见,总算是搞定。但是好记性不如烂笔杆,所以特意记下,以防止自己遗忘,同时也给那些遇到同样问题的人提供一个好的参考途径:
(一)        JSP页面上是中文,但是看的是后是乱码:
解决的办法就是在JSP页面的编码的地方<%@ page language="java" contentType="text/html;charset=GBK" %>,因为Jsp转成Java文件时的编码问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的Java中间文件来确认
(二)        当用Request对象获取客户提交的汉字代码的时候,会出现乱码:
解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

/**
* Example filter that sets the character encoding to be used in parsing the
* incoming request
*/
public class SetCharacterEncodingFilter implements Filter {

/**
     * Take this filter out of service.
     */
    public void destroy() {
    }
    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     */
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("GBK");

// 传递控制到下一个过滤器
    chain.doFilter(request, response);
    }

public void init(FilterConfig filterConfig) throws ServletException {
    }
}
配置web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。
还有就是对含有汉字字符的信息进行处理,处理的代码是:
package dbJavaBean;

public class CodingConvert
{  
public CodingConvert()
{
  //
}
public String toGb(String uniStr){
     String gbStr = "";
     if(uniStr == null){
   uniStr = "";
     }
     try{
   byte[] tempByte = uniStr.getBytes("ISO8859_1");
   gbStr = new String(tempByte,"GB2312");
     }
  catch(Exception ex){
    }
     return gbStr;
}
  
public String toUni(String gbStr){
     String uniStr = "";
     if(gbStr == null){
   gbStr = "";
     }
     try{
   byte[] tempByte = gbStr.getBytes("GB2312");
   uniStr = new String(tempByte,"ISO8859_1");
     }catch(Exception ex){
    }
    return uniStr;
}
}
你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话,提交的任何信息都能正确的显示。
(三)        在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上:如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了:
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
也是不起作用的,返回的中文还是乱码!!!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。
同样,在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的,改成get方法依旧不行。
由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息,很有可能引起常用字符集的冲突或是不匹配。
解决的办法是:
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>

2)重启tomcat,一切OK。
需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的这个文件就可以知道原因了。需要注意的是:这个地方如果你要是用UTF-8的时候在传递的过程中在Tomcat中也是要出现乱码的情况,如果不行的话就换别的字符集。

(四)        JSP页面上有中文,按钮上面也有中文,但是通过服务器查看页面的时候出现乱码:
     解决的办法是:首先在JSP文件中不应该直接包含本地化的消息文本,而是应该通过<bean:message>标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中,这个文件放在WEB-INF/classes/*下,例如我在页面里有姓名,年龄两个label,我首先就是要建一个Application.properties,里面的内容应该是name=”姓名” age=”年龄”,然后我把这个文件放到WEB-INF/classes/properties/下,接下来根据Application.properties文件,对他进行编码转化,创建一个中文资源文件,假定名字是Application_cn.properties。在JDK中提供了native2ascii命令,他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录,在DOS环境中执行一下命令,将生成按GBK编码的中文资源文件Application_cn.properties:native2ascii –encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件:name=/u59d3/u540d age=/u5e74/u9f84,在Struts-config.xml中配置:<message-resources parameter="properties.Application_cn"/>。到这一步,基本上完成了一大半,接着你就要在JSP页面上写<%@ page language="java" contentType="text/html;charset=GBK" %>,到名字的那个label是要写<bean:message key=”name”>,这样的化在页面上出现的时候就会出现中文的姓名,年龄这个也是一样,按钮上汉字的处理也是同样的。
(五)        写入到数据库是乱码:
解决的方法:要配置一个filter,也就是一个Servelet的过滤器,代码如同第二种时候一样。
如果你是通过JDBC直接链接数据库的时候,配置的代码如下:jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK,这样保证到数据库中的代码是不是乱码。
如果你是通过数据源链接的化你不能按照这样的写法了,首先你就要写在配置文件中,在tomcat 5.0.19中配置数据源的地方是在C:/Tomcat 5.0/conf/Catalina/localhost这个下面,我建立的工程是workshop,放置的目录是webapp下面,workshop.xml的配置文件如下:
<!-- insert this Context element into server.xml -->

<Context path="/workshop" docBase="workshop" debug="0"
reloadable="true" >

<Resource name="jdbc/WorkshopDB"
               auth="Container"
               type="javax.sql.DataSource" />

<ResourceParams name="jdbc/WorkshopDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>

<parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>

<parameter>
     <name>username</name>
     <value>root</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value></value>
    </parameter>

<!-- Class name for mm.mysql JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
</parameter>
   <parameter>
      <name>url</name>
<value><![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK]]></value>
    </parameter>
  </ResourceParams>

</Context>
粗体的地方要特别的注意,和JDBC直接链接的时候是有区别的,如果你是配置正确的化,当你输入中文的时候到数据库中就是中文了,有一点要注意的是你在显示数据的页面也是要用<%@ page language="java" contentType="text/html;charset=GBK" %>这行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的,写了一个Form的时候把他改成了一个jsp,这样有一个地方要注意了,那就是在Dreamver中Action的提交方式是request的,你需要把他该过来,因为在jsp的提交的过程中紧紧就是POST和GET两种方式,但是这两种方式提交的代码在编码方面还是有很大不同的,这个在后面的地方进行说明。3

以上就是我在开发系统中解决中文的问题,不知道能不能解决大家的问题,时间匆忙,没有及时完善,文笔也不是很好,有些地方估计是词不达意。大家可以给我意见,希望能共同进步。

tomcat中文的问题 转贴相关推荐

  1. Tomcat中文乱码问题的原理和解决方法

    为什么80%的码农都做不了架构师?>>>    Tomcat中文乱码问题的原理和解决方法 自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决 ...

  2. 关于Tomcat中文乱码问题的探究

    关于Tomcat中文乱码 最近在复习servlet的时候发现了令人困扰的tomcat中文乱码问题,查阅tomcat源码并且Debug最终找到乱码的罪魁祸首. 默认情况下,浏览器对post提交的中文数据 ...

  3. Linux麒麟系统中文乱码,ubuntu麒麟系统tomcat中文乱码怎么办?ubuntu tomcat中文显示乱码解决方法...

    在ubuntu麒麟系统中安装tomcat后,用户在搭建Demo程序的过程中有遇到tomcat中文显示乱码的情况,一般乱码都是因为编码问题导致的,而如果大家的编码设置是正确的话就是下面的原因导致的,遇到 ...

  4. TOMCAT中文问题,解决(全)(转载)

    TOMCAT中文问题解决了.其他应用服务器的问题也可以得到更好的理解,对于解决中文问题,和一些国际化的问题,会有更多的帮助...本文转载自CSDN (Tomcat中文问题解决一,二,三,四) ---- ...

  5. 新方案-eclipse配置tomcat中文乱码另一种解决方案

    分两步 第一步 Tomcat设置get编码格式 1 2 <Connector connectionTimeout="20000" port="8080"  ...

  6. Tomcat 中文乱码 设置UTF-8编码 问题解决办法

    在Java Web开发中,http请求带有中文字符的URI如果不处理容易出现乱码问题:这是因为Tomcat容器默认编码是iso-8859-1引起的,因此要避免出现乱码就要需要做相应的处理.解决办法如下 ...

  7. idea console中文乱码_idea控制台tomcat中文乱码的处理方法

    第一步: 在idea的目录中找: 第二步: 在idea64.exe.vmoptions中添加一句话: 保存关闭 第三步: 关闭idea再重新启动 第四步: 在往tomcat中部署项目时在VM opti ...

  8. JSP中文乱码解决方案了解和TOMCAT中文乱码解决

    java 中文乱码终极解决方案 首先,确保你的数据库是支持中文的.把数据库的编码方式设置能支持中文的,如GB2132,utf-8等,而且经过测试后确实能写入中文且正常显示.这样就就保证了数据库确实是支 ...

  9. solr6.4服务器+Tomcat+中文分词器

    Solr服务器的搭建 第一步:把solr-6.4.1.zip解压之后,找到solr-6.4.1/server/server-webapp/目录下的webapp文件夹,复制粘贴到tomcat下的weba ...

最新文章

  1. [Share]2008年国外最佳Web设计/开发技巧、脚本及资源总结
  2. python常见错误-python初学者常见的错误
  3. php获取http头信息,php如何获取http头信息
  4. 【RK3399Pro学习笔记】十、ROS服务端Server的编程实现
  5. 【C语言重点难点精讲】C语言内存管理
  6. VC调用QT的UIDLL
  7. 线性代数学习笔记(十四)
  8. 这款开源带采集的漫画cms,宅男的大爱
  9. 大牛直播sdk简单播放端demo使用
  10. 激活windows 2008 r2
  11. hive:函数:sort_array函数解决collet_list列表排序混乱问题
  12. P5708 【深基2.习2】三角形面积
  13. Linux 日志切割神器 Logrotate 原理和配置详解(附多生产实例)
  14. 文献阅读与写作(一)
  15. java中继承的介绍
  16. Android并发之Executor(线程池)家族(二)之AtomicInteger
  17. 大二单片机笔记,串口通信代码【郭天祥】【700字】【勿笑】【原创】
  18. scratch学习相关资料汇总
  19. spring boot 转pdf (html转pdf)
  20. 2020年鼠年正月十五 祝贺元宵节快乐

热门文章

  1. 《活着》读后感 -- 一个活在悲剧中的人为什么要继续活下去
  2. 我的2016,成长之路总是充满坎坷
  3. 男人如何保养!!!!(强力推荐)
  4. 超静音驱动芯片TMC2208-减少3D打印机的振动
  5. 修改mysql默认字符集为latin1_查看、设置与修改MySQL字符集
  6. python字典拷贝_python字典复制
  7. 预训练网络的模型微调方法
  8. 10行python代码的词云
  9. mac上安装go环境
  10. 第10章第25节:使用Paper Cut Art Generator创建剪纸艺术图像 [PowerPoint精美幻灯片实战教程]