彻底解决中文编码问题

上传人:第*** 文档编号:30976530 上传时间:2018-02-03 格式:DOC 页数:9 大小:62.50KB
返回 下载 相关 举报
彻底解决中文编码问题_第1页
第1页 / 共9页
彻底解决中文编码问题_第2页
第2页 / 共9页
彻底解决中文编码问题_第3页
第3页 / 共9页
彻底解决中文编码问题_第4页
第4页 / 共9页
彻底解决中文编码问题_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《彻底解决中文编码问题》由会员分享,可在线阅读,更多相关《彻底解决中文编码问题(9页珍藏版)》请在金锄头文库上搜索。

1、 彻底解决中文乱码问题张亚涛 2007-3-15(1)前言:在实际的编码过程中我们经验会遇到中文乱码显示的问题,现在大概将一些经常使用的解决办法总结一下供同学们参考和学习,希望对大家有所帮助。(2)Servlet 和 JSP 过滤器 Filter 简介:servlet API 的 2.3 版本中最重要的一个新功能就是能够为 servlet 和 JSP 页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet 链接 ”的一种功能强大且标准的替代品。过滤器是一个程序,它先于与之相关的 servlet 或 JSP 页面运行在服务器上。过滤器可附加到一个或多个 servlet 或 JS

2、P 页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:- 以常规的方式调用资源(即,调用 servlet 或 JSP 页面)。- 利用修改过的请求信息调用资源。- 调用资源,但在发送响应到客户机前对其进行修改- 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。过滤器提供了几个重要好处。首先,它以一种模块化的或可重用的方式封装公共的行为。你有 30 个不同的 serlvet 或JSP 页面,需要压缩它们的内容以减少下载时间吗?没问题:构造一个压缩过滤器(参阅第 11节),然后将它应用到 30 个资源上即可。其次,利用它能够将高级访问决策与表

3、现代码相分离。这对于 JSP 特别有价值,其中一般希望将几乎整个页面集中在表现上,而不是集中在业务逻辑上。例如,希望阻塞来自某些站点的访问而不用修改各页面(这些页面受到访问限制)吗?没问题:建立一个访问限制过滤器(参阅第 8 节)并把它应用到想要限制访问的页面上即可。最后,过滤器使你能够对许多不同的资源进行批量性的更改。你有许多现存资源,这些资源除了公司名要更改外其他的保持不变,能办到么?没问题:构造一个串替换过滤器(参阅第10 节),只要合适就使用它。但要注意,过滤器只在与 servlet 规范 2.3 版兼容的服务器上有作用。如果你的 Web 应用需要支持旧版服务器,就不能使用过滤器。建立

4、一个过滤器涉及下列五个步骤:1、建立一个实现 Filter 接口的类。这个类需要三个方法,分别是: doFilter、init 和destroy。doFilter 方法包含主要的过滤代码,init 方法建立设置操作,而 destroy 方法进行清楚。2、在 doFilter 方法中放入过滤行为。doFilter 方法的第一个参数为 ServletRequest 对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie 和 HTTP 请求头)的完全访问。第二个参数为 ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,如下一步所述,此参

5、数用来调用 servlet 或 JSP 页。3、调用 FilterChain 对象的 doFilter 方法。Filter 接口的 doFilter 方法取一个 FilterChain对象作为它的一个参数。在调用此对象的 doFilter 方法时,激活下一个相关的过滤器。如果没有另一个过滤器与 servlet 或 JSP 页面关联,则 servlet 或 JSP 页面被激活。4、对相应的 servlet 和 JSP 页面注册过滤器。在部署描述符文件(web.xml)中使用 filter和 filter-mapping 元素。5、禁用激活器 servlet。防止用户利用缺省 servlet UR

6、L 绕过过滤器设置。doFilter 方法:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws ServletException, IOExceptionHttpServletRequest req = (HttpServletRequest)request;System.out.println(req.getRemoteHost() + tried to access +req.getRequestURL() + on + new Date() + .)

7、;chain.doFilter(request,response);在 web.xml 中进行部署分别是:filter 和 filter-mapping。filter 元素向系统注册一个过滤对象,filter-mapping 元素指定该过滤对象所应用的 URL。1.filter 元素filter 元素位于部署描述符文件(web.xml )的前部,所有 filter-mapping、servlet 或servlet-mapping 元素之前。filter 元素具有如下六个可能的子元素::icon 这是一个可选的元素,它声明 IDE 能够使用的一个图象文件。:filter-name 这是一个必需的

8、元素,它给过滤器分配一个选定的名字。:display-name 这是一个可选的元素,它给出 IDE 使用的短名称。:description 这也是一个可选的元素,它给出 IDE 的信息,提供文本文档。:filter-class 这是一个必需的元素,它指定过滤器实现类的完全限定名。:init-param 这是一个可选的元素,它定义可利用 FilterConfig 的 getInitParameter 方法读取的初始化参数。单个过滤器元素可包含多个 init-param 元素。2.filter-mapping 元素filter-mapping 元素位于 web.xml 文件中 filter 元素之

9、后 serlvet 元素之前。它包含如下三个可能的子元素::filter-name 这个必需的元素必须与用 filter 元素声明时给予过滤器的名称相匹配。:url-pattern 此元素声明一个以斜杠(/)开始的模式,它指定过滤器应用的 URL。所有filter-mapping 元素中必须提供 url-pattern 或 servlet-name。但不能对单个 filter-mapping 元素提供多个 url-pattern 元素项。如果希望过滤器适用于多个模式,可重复整个filter-mapping 元素。:servlet-name 此元素给出一个名称,此名称必须与利用 servlet

10、元素给予 servlet 或 JSP页面的名称相匹配。不能给单个 filter-mapping 元素提供多个 servlet-name 元素项。如果希望过滤器适合于多个 servlet 名,可重复这个 filter-mapping 元素。(3)在 Rational Application Developer 中的建立字符转换过滤器:1.新建 -web-过滤器:SetCharacterEncodingFilter会在 web.xml 中产生如下代码:ChangeCodeFilterChangeCodeFc.SetCharacterEncodingFilterSetCharacterEncodin

11、gFilter/SetCharacterEncodingFilter2.在过滤器的 doFilter 方法中添加如下代码:public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException arg0.setCharacterEncoding(GBK); /设定字体编码为 GBKarg2.doFilter(arg0, arg1);/ 传递控制到下一个过滤器3.在 web.xml 中进行部署在 web.xml 的过滤器-编辑器中选择

12、:servlet 映射 - 添加 - Faces Servlet会在 web.xml 中产生如下代码:SetCharacterEncodingFilterFaces Servlet使用过滤器的话就不必在每个 SERVLET 里都调用 request 和 response 对象设置字符集了(4)其他参考信息tomcat 下中文的彻底解决 (一) JSP 页面上是中文,但是看的是后是乱码:解决的办法就是在 JSP 页面的编码的地方,因为 Jsp 转成 Java 文件时的编码问题,默认的话有的服务器是 ISO-8859-1,如果一个 JSP 中直接输入了中文, Jsp 把它当作 ISO-8859-1

13、 来处理是肯定有问题的,这一点,我们可以通过查看 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 j

14、avax.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.*/pu

15、blic 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);/

16、传递控制到下一个过滤器chain.doFilter(request, response);public void init(FilterConfig filterConfig) throws ServletException 配置 web.xmlSet Character EncodingSetCharacterEncodingFilterSet Character Encoding/*如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的 Form 提交的数据是不是用 get 提交的,一般来说用 post 提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。还有就是对含有汉字字符的信息进行处理,处理的代码是:package dbJavaBean;public class CodingConvert public CodingConvert()/public

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号