疯狂

STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

tomcat 编码问题

Posted on 2007-09-24 20:02 疯狂 阅读(1919) 评论(1)  编辑  收藏 所属分类: web
当在做程序的是你也许会遇到一些很让你恼火的乱码问题,就是在你在页面传参数或向数据库里插入数据或去值的时候会出现乱码的问题,其实有很多解决办法比如:添加request.setCharacterEncoding("GB18030");或在取值的时候用String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"gbk");等 但有时仍然会遇到一些问题:
针对get方式(也就是链接的方式)除了使用String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"gbk");最好的方式就是在tomcat的配置文件server.xml相应端口的节点里面加上URIEncoding='utf-8'.
针对post方式建议使用fliter解决,注意:
这种方式只对post方式有效果 get方式用上面的方法在tomcat里面配置
首先:定义一个类CharsetEncodingFilter让它实现javax.servlet.Filter接口
  然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3版本。)
 <filter>

     
<filter-name>CharsetEncodingFilter</filter-name>

     
<filter-class>com.util.filter.CharsetEncodingFilter</filter-class>//class必须是完整路径

     
<init-param>

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

            
<param-value>GB18030</param-value>

     
</init-param>

 
</filter>

 
<filter-mapping>

     
<filter-name>CharsetEncodingFilter</filter-name>

     
<url-pattern>*.jsp</url-pattern>
</filter-mapping>//表示对所有jsp文件有效


filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六个可能的子元素:
 icon  这是一个可选的元素,它声明IDE能够使用的一个图象文件。
 filter-name  这是一个必需的元素,它给过滤器分配一个选定的名字。
 display-name  这是一个可选的元素,它给出IDE使用的短名称。
 description  这也是一个可选的元素,它给出IDE的信息,提供文本文档。
 filter-class  这是一个必需的元素,它指定过滤器实现类的完全限定名。
 init-param  这是一个可选的元素,它定义可利用FilterConfig的getInitParameter方法读
--------------------
另外其他知识:
pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码,服务器返回的时候会在head里面指定(可以用firebug看一下):
Content-Type:text/html;charset=GBK (如果你的jsp里面设定的Content-Type为:charset=GBK )
pageEncoding 和contentType的预设都是 ISO8859-1. 而随便设定了其中一个, 另一个就跟着一样了
 


评论

# re: 用servlet filter 解决编码问题的一个小例子  回复  更多评论   

2007-09-26 12:41 by 清风刀客
很受启发,不错,这个方法好等等去试试.

只有注册用户登录后才能发表评论。


网站导航: