我有两个过滤器!
一个是 /* 过滤所有,作用是字符编码过滤,编码格式参数为gb2312
 
一个dwr的 /dwr/* 
 我的第一个字符编码过滤器过滤了所有,结果把/dwr/*也过滤了,导致 dwr 不能用了,怎么样才能使,第一个字符编码过滤器在过滤的时候不过滤url为 /dwr/*的请求
···
 谢谢了如果能通过其他方法解决也可以,反正能把问题解决就行!

解决方案 »

  1.   

    dwr是Ajax框架,在地址栏里输入/dwr/*可以看见你所可以调用的方法,并且可以进行测试。我也是使用了过滤器,和dwr框架,但是没有你说的那种情况啊
      

  2.   

    在web.xml文件里调整一下过滤器的顺序。
      

  3.   

    没问题吧,dwr那个也得编码转换呀
      

  4.   


    <servlet>
          <servlet-name>dwr-invoker</servlet-name>
          <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
          <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
          </init-param>
          <load-on-startup>10</load-on-startup>
        </servlet>
        <servlet-mapping>
          <servlet-name>dwr-invoker</servlet-name>
          <url-pattern>/dwr/*</url-pattern>
        </servlet-mapping>     <filter>
    filter-name>SetCharacterEncodingFilter</filter-name>
    <filter-class>legou.log.CharFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GB2312</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping> 
     就这里两个配置!字符串编码过滤器如下:protected String encoding = null;
    protected FilterConfig filterConfig = null;
    public void destroy() {
    this.encoding = null;
    this.filterConfig = null;
    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    response.setCharacterEncoding("text/html;charset="+encoding+"");
    request.setCharacterEncoding(encoding);
    chain.doFilter(request, response); }
    public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
    this.encoding = filterConfig.getInitParameter("encoding");
    } 我也不知道撒原因了,反正不行,项目中有hibernate···
      

  5.   

    我已经找到错误了,出在这句
    response.setCharacterEncoding("text/html;charset="+encoding+"");
     那位帮我研究一下应该怎么改呀 ?
    response.setCharacterEncoding(encoding);
    我改成这样dwr 能用了 
    但是编码没转换过来
      

  6.   

    protected String encoding = null;
        protected FilterConfig filterConfig = null;
        public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
                response.setCharacterEncoding("text/html;charset="+encoding+"");
                request.setCharacterEncoding(encoding);
                //这儿添加代码
                String str=request.getServletPath();
    if(str.indexOf("dwr")==1)
    {
     chain.doFilter(request, response); }
                chain.doFilter(request, response);    }
        public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
        }
      

  7.   

    这么简单也拿出来问,在编码过滤器里面加上一个ifg语句就行了嘛
    String str=request.getServletPath(); 
    if(str.indexOf("/dwr/")==1) 

    chain.doFilter(request, response); } 
      

  8.   


    我认为这个方案就简单。过滤器里一样要进行处理,加上这个判断不就行了JAVA面试题,Java代码,Java学习资料,请到:JAVA世纪网
    数据库面试题,智力面试题,相声,笑话,请到:老紫竹的家
      

  9.   

    那个简单的解决方法唯一的小缺陷就是耦合到程序里了,直接吧那个需要过滤的参数写到web.xml的filter里比较好,当然了哈,小程序完全可以无视我说的,不能为了设计而设计
      

  10.   

    支持在web.xml里加参数,传到filter里 再判断
    这样既可以解决问题,又可以解决紧耦合的问题
      

  11.   

    过滤?这样过滤是不是有点过时了?
    在大程序上的设计上会有BUG的
      

  12.   

    用java的regex对/dwr/*进行正则匹配, 用match方法, 这样是完全匹配, 如果不匹配那么就是其他情况, 包含/*或是不包含, 你可以对这种情况再用regex的find方法,匹配/*的情况, 也就是先过滤掉/dwr/*的情况。 
      

  13.   

     郁闷!为什么我这个帖子还被推荐了呀! 其实问题没上面说的那么复杂!!! 编码没转过来是因为我把编码格式encoding改成UTF-8了,在web.xml改成GB2312就可以了,还有  servlet编码格式过滤器,对/dwr/*是没有影响的,错误错在了这句
    response.setCharacterEncoding("text/html;charset="+encoding+"");改成 response.setCharacterEncoding(encoding");就好了··
      

  14.   

    LZ,我总觉得你这句用错了:response.setCharacterEncoding("text/html;charset="+encoding+"");改为:response.setContentType("text/html;charset="+encoding+"");可以看到HTML元标签里面:<meta http-equiv="Content-Type" content="text/html;charset=gb2312">response.setCharacterEncoding()我从来没用过,只是request里面转码要用
      

  15.   

    web.xml中的配置<filter>
       <filter-name>EncodingCharAtServlet</filter-name>
       <filter-class>com.gw.dao.EncodingCharAtServlet</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
      </filter>
      <filter-mapping>
       <filter-name>EncodingCharAtServlet</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping>过滤器类中的代码:
    public class EncodingCharAtServlet extends HttpServlet implements Filter { String encoding = ""; public void init(FilterConfig arg0) throws ServletException {
    String stuEncoding = arg0.getInitParameter("encoding");
    if (stuEncoding != null) {
    encoding = stuEncoding;
    }
    } public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    arg0.setCharacterEncoding(encoding);//
    arg2.doFilter(arg0, arg1);// 继续过滤
    }
    }
      

  16.   

    1.setCharacterEncoding是设置文件编码格式,如果头文件中写了编码为UTF-8,可用这个方法指定,最好让两者一致。2.过滤器中加入了耦合逻辑是必要的。首先是编码转换过滤,其次是dwr过滤。首次过滤后dwr没被转换需要filter再次过滤,所以有了代码:
    String str=request.getServletPath(); 
    if(str.indexOf("/dwr/")==1) 

    chain.doFilter(request, response); 
    }3.不要嘲笑新手,高手都是从菜鸟阶段过来的,我们一直在努力!
      

  17.   

    web.xml中的配置 <filter> 
      <filter-name>EncodingCharAtServlet </filter-name> 
      <filter-class>com.gw.dao.EncodingCharAtServlet </filter-class> 
    <init-param> 
    <param-name>encoding </param-name> 
    <param-value>UTF-8 </param-value> 
    </init-param> 
      </filter> 
      <filter-mapping> 
      <filter-name>EncodingCharAtServlet </filter-name> 
      <url-pattern>/* </url-pattern> 
      </filter-mapping> 过滤器类中的代码: 
    public class EncodingCharAtServlet extends HttpServlet implements Filter { String encoding = ""; public void init(FilterConfig arg0) throws ServletException { 
    String stuEncoding = arg0.getInitParameter("encoding"); 
    if (stuEncoding != null) { 
    encoding = stuEncoding; 

    } public void doFilter(ServletRequest arg0, ServletResponse arg1, 
    FilterChain arg2) throws IOException, ServletException { 
    arg0.setCharacterEncoding(encoding);// 
    arg2.doFilter(arg0, arg1);// 继续过滤 

    }
      

  18.   

    为什么我的serletReqest没有ServletPath方法。