您的位置:首页 > 编程语言 > Java开发

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

2013-04-07 17:15 232 查看
此文章并非含技术量高,只是解决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" />

  如果你是使用SSH(Struts/Sping/Hibrenate)框架开发的话就不用自己写过滤器,直接配置框架本身的过滤器,只要在WEB-INF中的web.xml中配置过滤器就行了,具体代码如下:
<filter>

  <filter-name>Filter</filter-name>

  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

  <init-param>

    <param-name>encoding</param-name>

     <param-value>GBK</param-value>

  </init-param>

</filter>

<filter-mapping>

  <filter-name>Filter</filter-name>

  <url-pattern>/*</url-pattern>

</filter-mapping>

<filter-mapping>

   <filter-name>Filter</filter-name>

  <url-pattern>*.do</url-pattern>

</filter-mapping>
  当这些做完时初步达到效果如图:

  


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: