字符编码过滤器中对特殊的路径进行特殊处理

来源:互联网 发布:Oracle sql格式化时间 编辑:程序博客网 时间:2024/06/06 03:06

我做在线打开的时候将word文档转换为html文件,保存在temp文件夹下,然后通过链接打开html文件实现“在线打开word”的功能,结果产生了乱码,原因是在windows系统下生成的html文件默认是“gb2312"编码的,而我们的网页使用了编码过滤器将所有请求全部改为”UTF-8“编码的了。所以我就将这个编码过滤器改进了下,先对请求路径进行判断,如果请求是来自保存html文件的"temp“文件夹就进行特殊处理编码为”gb2312“从而解决乱码。

这个过滤器对“temp”文件夹下的文件进行“GB2312”编码,对所有其他请求进行“UTF-8”编码:

Code:
  1. public class EncodeFilter implements Filter {  
  2.   
  3.     public void destroy() {  
  4.   
  5.     }  
  6.   
  7.     public void doFilter(ServletRequest request, ServletResponse response,  
  8.             FilterChain china) throws IOException, ServletException {  
  9.         HttpServletRequest httprequest = (HttpServletRequest)request;  
  10.           
  11.         String servletPath = httprequest.getServletPath();  
  12.           
  13.         String dir = null;  
  14.         if(servletPath.indexOf("/"1)>1)  
  15.         dir = servletPath.subSequence(servletPath.indexOf("/"0)+1, servletPath.indexOf("/"1)).toString();  
  16.         if(dir!=null&&"temp".equals(dir)){  
  17.             request.setCharacterEncoding("GB2312");  
  18.             response.setCharacterEncoding("GB2312");  
  19.         }else{  
  20.             request.setCharacterEncoding("UTF-8");  
  21.             response.setCharacterEncoding("UTF-8");  
  22.               
  23.         }  
  24.               
  25.         china.doFilter(request, response);  
  26.     }  
  27.   
  28.     public void init(FilterConfig arg0) throws ServletException {  
  29.   
  30.     }  
  31.   
  32. }  

在web.xml文件中的配置(与tomcat版本有关)

Code:
  1. <filter>  
  2.     <filter-name>EncodeFileter</filter-name>  
  3.     <filter-class>com.star.util.EncodeFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>EncodeFileter</filter-name>  
  7.     <servlet-name>*</servlet-name>  
  8. </filter-mapping>  

 

原创粉丝点击