最近在弄 在线word编辑的一个东西  用的别人的控件. 其中有一个 OfficeServer.jsp 下面是我的web.xml 配置  里面配置里 *.jsp 过滤所有jsp 页面 但是我  OfficeServer.jsp这个页面不需要过滤 因为一过滤 它里面的 的 request对象 传值 会变成 struts2 里面的org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper  
而我需要的是 
org.apache.catalina.connector.RequestFacade 这个 
<!-- 定义Struts2的FilterDispathcer的Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/struts/*</url-pattern>
</filter-mapping>
问题就是 只要 不过滤 OfficeServer.jsp  这个页面   
在filter-mapping里面配置 很多 包下面的jsp 这样是最坏的打算 还有其他的么??

解决方案 »

  1.   

    <url-pattern>/*</url-pattern>
     
      

  2.   

    过滤器源代码
    import org.apache.struts2.StrutsStatics;
    import org.apache.struts2.dispatcher.Dispatcher;
    import org.apache.struts2.dispatcher.mapper.ActionMapping;
    import org.apache.struts2.dispatcher.ng.ExecuteOperations;
    import org.apache.struts2.dispatcher.ng.InitOperations;
    import org.apache.struts2.dispatcher.ng.PrepareOperations;import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    import java.util.regex.Pattern;/**
     * Handles both the preparation and execution phases of the Struts dispatching process.  This filter is better to use
     * when you don't have another filter that needs access to action context information, such as Sitemesh.
     */
    public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
        protected PrepareOperations prepare;
        protected ExecuteOperations execute;
    protected List<Pattern> excludedPatterns = null;    public void init(FilterConfig filterConfig) throws ServletException {
            InitOperations init = new InitOperations();
            try {
                FilterHostConfig config = new FilterHostConfig(filterConfig);
                init.initLogging(config);
                Dispatcher dispatcher = init.initDispatcher(config);
                init.initStaticContentLoader(config, dispatcher);            prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);
                execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);
    this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);            postInit(dispatcher, filterConfig);
            } finally {
                init.cleanup();
            }    }    /**
         * Callback for post initialization
         */
        protected void postInit(Dispatcher dispatcher, FilterConfig filterConfig) {
        }    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;        try {
                prepare.setEncodingAndLocale(request, response);
                prepare.createActionContext(request, response);
                prepare.assignDispatcherToThread();
    if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
    chain.doFilter(request, response);
    } else {
    request = prepare.wrapRequest(request);
    ActionMapping mapping = prepare.findActionMapping(request, response, true);
    if (mapping == null) {
    boolean handled = execute.executeStaticResourceRequest(request, response);
    if (!handled) {
    chain.doFilter(request, response);
    }
    } else {
    execute.executeAction(request, response, mapping);
    }
    }
            } finally {
                prepare.cleanupRequest(request);
            }
        }    public void destroy() {
            prepare.cleanupDispatcher();
        }
    }
      

  3.   

    错了,不是一个版本的。sorry 
      

  4.   

    也不用那么麻烦啊    你可以直接用struts2的  struts.action.excludePattern属性来配置啊   比如你不需要struts2拦截/user/*.action  那么你就直接    struts.action.excludePattern=/user/*.action就ok了    在struts.xml里配置  或者struts-default.properties 都行
      

  5.   

    其实我都是只过滤   .action 很少去过滤所有
      

  6.   

    不管是在 struts.xml 里面配置 
    <constant name="struts.action.excludePattern" value="OfficeServer.*"/>
    或 <constant name="struts.action.excludePattern" value="/oa/OfficeServer.jsp"/>
    或 <constant name="struts.action.excludePattern" value="/oa/*"/>还有struts属性文件里面配置 
    struts.action.excludePattern=/oa/OfficeServer.jsp
    等一下  都不行我现在只知道 在web.xml里面吧 <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>去掉才行的通
      

  7.   


    是的,你拦截了所有的jsp文件,你为什么要这样做?用struts2的话还是只拦截action的比较好要不就重写下过滤器
    把那个类的源码改下就可以了,然后在web.xml中添加自己的过滤器
      

  8.   


    我自己写一个过滤器 拦截那个页面         <filter>
    <filter-name>officeServer</filter-name>
    <filter-class>com.zds.oa.filter.OfficeServerFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>officeServer</filter-name>
    <url-pattern>/oa/OfficeServer.jsp</url-pattern>
    </filter-mapping>已经进入过滤器了 但是怎么跳过 其他过滤器??? 
    chain.doFilter(request, response); 过后还是去struts 里面去了
      

  9.   

    <url-pattern>/oa/OfficeServer.jsp</url-pattern>
      

  10.   

    额...   我自己弄好了  自定义一个 filter监听器 
    在  oFilter
    里面 request.getRequestDispatcher("/oa/OfficeServer.jsp").forward(request, response); 谢谢各位