巧妙解决JavaWeb开发中中文乱码问题

来源:互联网 发布:windows增强安全配置 编辑:程序博客网 时间:2024/05/29 15:46

此文章并非含技术量高,只是解决JavaWeb开发中中文乱码问题,在JavaWeb开发过程中很多程序员都遇到过中文乱码的情况,比如说直接访问Servlet出现乱码,如图:

 

很多程序员又会说这还不简单,直接在Servlet中加上“response.setContentType("text/html;charset=GBK");”不就解决了吗?但是有些是不起作用的,那这时有什么更好的方法解决呢?有,写一个过滤器来过滤编码格式,自己写一个类(Filter.java),如图:

 

把Filter类建在公共包下(common),同时Filter类必须实现Filter接口,如图:

 

记住,在选择继承Filter接口时别选错了,一定是javax.servlet中的Filter接口,如图:

 

建好Filter类是如图的:

 

然后在Filter类中的doFilter方法中写如下代码:

  request.setCharacterEncoding("GBK");
    response.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    chain.doFilter(request, response);

  即如图:

 

然而这个类就完成了,Filter类中就不用在写什么代码了,但是到这一步并非解决乱码问题了,因为该类还要在web.xml中注册,注册代码如下:

 <filter>
     <filter-name>Filter</filter-name>
     <filter-class>net.zrg.common.Filter</filter-class>(这是该类所在的包路径)
  </filter>
  <filter-mapping>
     <filter-name>Filter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>

在写这些配置文件时要注意,不要配置错了,否则Filter一样不能解决乱码问题。

  到这里就可以解决乱码问题了,但是有程序员又问到他用Action做是又出现往数据库插入数据时那些数据成乱码了,这也好解决,在刚刚才的web.xml注册中加多一个条件,代码如下:

 <filter-mapping>
     <filter-name>Filter</filter-name>
     <url-pattern>*.do</url-pattern>
  </filter-mapping>

这样就能过滤到Action中的中文格式了,具体如图:

如果这些都还不起作用的后,那就去改tomcat的配置文件,让它自动装换,解决方法也很简单,就是设置tomcat的编码方式,在server.xml中设置URIEncoding

Xml代码
<!-- A "Connector" represents an endpoint by which requests are received   

   and responses are returned. Documentation at :   

   Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)    

   Java AJP  Connector: /docs/config/ajp.html   

   APR (HTTP/AJP) Connector: /docs/apr.html   

   Define a non-SSL HTTP/1.1 Connector on port 8080   

-->  

<Connector port="8080" protocol="HTTP/1.1"    

           connectionTimeout="20000"    

           redirectPort="8443" URIEncoding="GBK" />  

    <!-- A "Connector" represents an endpoint by which requests are received         and responses are returned. Documentation at :         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)         Java AJP  Connector: /docs/config/ajp.html         APR (HTTP/AJP) Connector: /docs/apr.html         Define a non-SSL HTTP/1.1 Connector on port 8080    -->    <Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" URIEncoding="GBK" />

  当这些做完时初步达到效果如图:

 

这些中文就你正常显示了,在此文中我写的设置都是“GBK”,如果你的编码格式是“UTF-8”话你只要把“GBK”都改为“UTF-8”就行了,如果你还有其他编码格式你照样可以这样改,嗯,这文章有些人看来很简单,但是对有些人是有帮助的,希望给你们有一定的帮助!

 

原创粉丝点击