Struts2中的过滤器使用的是org.apache.struts2.dispatcher.FilterDispatcher,由于Servlet处理上传问题采用的是Servlet,而Struts2中配置的Filter会把所有的请求过滤掉,FCKEditor就接收不到请求!试着自定义过滤器import java.io.IOException;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;import org.apache.struts2.dispatcher.FilterDispatcher;/**
 * 功能描述:自定义过滤器,实现Struts2和FCKEditor的整合
 * 由于Struts2的过滤器会将FCKEditor上传操作的请求过滤,自定义过滤器解决,如果是FCKEditor文件上传操作则不进行过滤
 * 
 * @author lilei
 * @date 2011-06-28
 * @version 1.0
 * 
 */
public class FCKEditorFilter extends FilterDispatcher { public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)throws IOException,ServletException{  
      HttpServletRequest request = (HttpServletRequest) req;  
      String URI = request.getRequestURI(); 
      String[] uriArray = URI.split("/fckeditor/editor/filemanager/connectors/"); 
      int arrayLen = uriArray.length; 
      if (arrayLen > 1) { 
          chain.doFilter(req, res);  
      }else { 
          super.doFilter(req, res, chain);   
      } 
}
}可是FCKEditor的请求是没被Struts2接管,但是也没被FCKEditor接管,,求解中、、、
注:使用的是Struts2.0.6,使用的过滤器是FilterDispatcher

解决方案 »

  1.   


    package com.saye.cmmb.action.maintain;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;/**
     * 功能描述:自定义过滤器,实现Struts2和FCKEditor的整合
     * 由于Struts2的过滤器会将FCKEditor上传操作的请求过滤,自定义过滤器解决,如果是FCKEditor文件上传操作则不进行过滤
     * 
     * @author lilei
     * @date 2011-06-28
     * @version 1.0
     * 
     */
    public class FCKEditorFilter implements Filter {
    private String DispatcherUrl; public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)throws IOException,ServletException{  
          HttpServletRequest request = (HttpServletRequest) req;
          if(request.getCharacterEncoding() == null || "".equals(request.getCharacterEncoding())) {
           request.setCharacterEncoding("utf-8");
          }
          String URI = request.getRequestURI(); 
          String[] uriArray = URI.split("/fckeditor/editor/filemanager/connectors/"); 
          int arrayLen = uriArray.length; 
          if (arrayLen > 1) {
           request.getRequestDispatcher(DispatcherUrl).forward(req, res);
          }else { 
           chain.doFilter(req, res);  
          } 
    } public void destroy() {
    } public void init(FilterConfig filterConfig) throws ServletException {
     DispatcherUrl = filterConfig.getInitParameter("DispatcherUrl");
    }
    }
      

  2.   

    在配置struts2的过滤器的时候就不要<url-mapping>/*</url-mapping>这样写,最要加上后最(.do/.html/.action....)这样filter就不会把所有的请求都拦截了,记住在struts的配置文件中用
    <constxxx name="struts2.xxxxxxxxxx" value=".do"/>在这里也要配置。