【问题标题】:DynamicMappingFilter and to many nested request with error pagesDynamicMappingFilter 和许多带有错误页面的嵌套请求
【发布时间】:2012-02-20 14:03:23
【问题描述】:

我使用 DynamicMappingFilter 配置了 Stripes,因此我可以使用没有“*.action”的 URL。我希望 Stripes 处理我的错误页面。我做了一个简单的error.jsp 页面,我在web.xml 中引用了它来处理404 错误:

<jsp:forward page="/support/Error" />

它正在转发到这个,现在几乎是空的,Stripes 动作:

public class ErrorAction extends BaseAction implements ActionBean {

    @DefaultHandler
    public Resolution action() {
        return new ForwardResolution("/WEB-INF/pages/test.jsp");
    }
}

/WEB-INF/pages/test.jsp 是一个纯 HTML Hello World 页面(由 Netbeans 生成)。

但由于某种原因它不起作用。转发到/WEB-INF/pages/test.jsp 后,再次请求ErrorAction,这个循环一直持续到GlassFish 停止为止。

这是被记录的内容(/fasdfasdfasdf 是一个不存在的 URL):

INFO: 14:37:13,646 TRACE StripesFilter:198 - Intercepting request to URL: /fasdfasdfasdf
INFO: 14:37:13,648 DEBUG UrlBindingFactory:187 - No URL binding matches /fasdfasdfasdf
INFO: 14:37:13,648 DEBUG UrlBindingFactory:187 - No URL binding matches /fasdfasdfasdf

INFO: 14:37:13,650 TRACE StripesFilter:198 - Intercepting request to URL: /support/Error
WARNING: PWC4011: Unable to set request character encoding to UTF-8 from context /mycompany-web-seller, because request parameters have already been read, or ServletRequest.getReader() has already been called
INFO: 14:37:13,652 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,653 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,653 TRACE DispatcherServlet:198 - Dispatching request to URL: /support/Error
INFO: 14:37:13,654 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage RequestInit
INFO: 14:37:13,654 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage ActionBeanResolution
INFO: 14:37:13,654 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,655 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,656 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage HandlerResolution
INFO: 14:37:13,656 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,657 DEBUG DispatcherHelper:187 - Resolved event: action; will invoke: ErrorAction.action()
INFO: 14:37:13,657 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage BindingAndValidation
INFO: 14:37:13,658 DEBUG DefaultActionBeanPropertyBinder:187 - Running required field validation on bean class com.mycompany.stripes.support.ErrorAction
INFO: 14:37:13,658 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage CustomValidation
INFO: 14:37:13,659 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage EventHandling
INFO: 14:37:13,659 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage ResolutionExecution
INFO: 14:37:13,660 DEBUG HttpCacheInterceptor:187 - Looking for HttpCache on com.mycompany.stripes.support.ErrorAction.action()
INFO: 14:37:13,660 DEBUG UrlBindingFactory:187 - No URL binding matches /WEB-INF/pages/test.jsp
INFO: 14:37:13,661 DEBUG UrlBindingFactory:187 - No URL binding matches /WEB-INF/pages/test.jsp
INFO: 14:37:13,662 TRACE ForwardResolution:198 - Forwarding to URL: /WEB-INF/pages/test.jsp

INFO: 14:37:13,667 TRACE StripesFilter:198 - Intercepting request to URL: /support/Error
INFO: 14:37:13,668 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,669 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,670 TRACE DispatcherServlet:198 - Dispatching request to URL: /support/Error
INFO: 14:37:13,670 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage RequestInit
INFO: 14:37:13,671 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage ActionBeanResolution
INFO: 14:37:13,671 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,672 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,673 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage HandlerResolution
INFO: 14:37:13,673 DEBUG UrlBindingFactory:187 - Matched /support/Error to /support/Error
INFO: 14:37:13,674 DEBUG DispatcherHelper:187 - Resolved event: action; will invoke: ErrorAction.action()
INFO: 14:37:13,675 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage BindingAndValidation
INFO: 14:37:13,675 DEBUG DefaultActionBeanPropertyBinder:187 - Running required field validation on bean class com.mycompany.stripes.support.ErrorAction
INFO: 14:37:13,676 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage CustomValidation
INFO: 14:37:13,676 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage EventHandling
INFO: 14:37:13,677 DEBUG ExecutionContext:187 - Transitioning to lifecycle stage ResolutionExecution
INFO: 14:37:13,677 DEBUG HttpCacheInterceptor:187 - Looking for HttpCache on com.mycompany.stripes.support.ErrorAction.action()
INFO: 14:37:13,678 DEBUG UrlBindingFactory:187 - No URL binding matches /WEB-INF/pages/test.jsp
INFO: 14:37:13,679 DEBUG UrlBindingFactory:187 - No URL binding matches /WEB-INF/pages/test.jsp
INFO: 14:37:13,679 TRACE ForwardResolution:198 - Forwarding to URL: /WEB-INF/pages/test.jsp

... and again the same

例外是:

WARNING: ApplicationDispatcher[/mycompany-web-seller] PWC1231: Servlet.service() for servlet default threw exception 
javax.servlet.ServletException: PWC1232: Exceeded maximum depth for nested request dispatches: 20                    
  at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:772)                         
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)                           
  at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)                   
  at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)                       
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)                         

  at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)                          
  at net.sourceforge.stripes.action.ForwardResolution.execute(ForwardResolution.java:110)                            
  at net.sourceforge.stripes.controller.DispatcherHelper$7.intercept(DispatcherHelper.java:508)                      
  at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)                          
  at net.sourceforge.stripes.controller.HttpCacheInterceptor.intercept(HttpCacheInterceptor.java:99)                 
  at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)                          
  at net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
  at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)                          
  at net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)                              
  at net.sourceforge.stripes.controller.DispatcherHelper.executeResolution(DispatcherHelper.java:502)                
  at net.sourceforge.stripes.controller.DispatcherServlet.executeResolution(DispatcherServlet.java:286)              
  at net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:170)                        
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)                                                    
  at net.sourceforge.stripes.controller.DynamicMappingFilter$2.doFilter(DynamicMappingFilter.java:431)               
  at net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)                               
  at net.sourceforge.stripes.controller.DynamicMappingFilter.doFilter(DynamicMappingFilter.java:418)                 
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)               
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)                       
  at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785)                         
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)                           
  at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)                   
  at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)                       
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)                         
  at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)                          
  at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:785)                                     
  at org.apache.jsp.error_jsp._jspService(error_jsp.java:48)                                                         
  at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)                                             
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)                                                    
  at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403)                                 
  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)                                        
  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)                                               
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)                                                    
  at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)                                     
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)               
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)                       
  at net.sourceforge.stripes.controller.DynamicMappingFilter.doFilter(DynamicMappingFilter.java:397)                 
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)               
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)                       
  at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785)                         
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)                           
  at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485)                   
  at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)                       
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)                         
  at org.apache.catalina.core.ApplicationDispatcherForward.custom(ApplicationDispatcherForward.java:253)             
  at org.apache.catalina.core.ApplicationDispatcherForward.status(ApplicationDispatcherForward.java:209)             
  at org.apache.catalina.core.ApplicationDispatcherForward.commit(ApplicationDispatcherForward.java:131)             
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:353)                         

  at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)                          
  at net.sourceforge.stripes.action.ForwardResolution.execute(ForwardResolution.java:110)                            
  at net.sourceforge.stripes.controller.DispatcherHelper$7.intercept(DispatcherHelper.java:508)                      
  at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)                          
  at net.sourceforge.stripes.controller.HttpCacheInterceptor.intercept(HttpCacheInterceptor.java:99)                 
  at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)                          
  at net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
  at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)                          
  at net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)                              
  at net.sourceforge.stripes.controller.DispatcherHelper.executeResolution(DispatcherHelper.java:502)                
  at net.sourceforge.stripes.controller.DispatcherServlet.executeResolution(DispatcherServlet.java:286)              
  at net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:170)                        
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)                                                    
  at net.sourceforge.stripes.controller.DynamicMappingFilter$2.doFilter(DynamicMappingFilter.java:431)               
  at net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)                               
  at net.sourceforge.stripes.controller.DynamicMappingFilter.doFilter(DynamicMappingFilter.java:418)                 
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)               
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)                       
  at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785)                         
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)                           
  at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)                   
  at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)                       
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)                         
  at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)                          
  at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:785)                                     
  at org.apache.jsp.error_jsp._jspService(error_jsp.java:48)                                                         
  at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)                                             
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)                                                    
  at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:403)                                 
  at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:492)                                        
  at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)                                               
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)                                                    
  at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)                                     
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)               
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)                       
  at net.sourceforge.stripes.controller.DynamicMappingFilter.doFilter(DynamicMappingFilter.java:397)                 
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)               
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)                       
  at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785)                         
  at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)                           
  at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:485)                   
  at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)                       
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)                         
  at org.apache.catalina.core.ApplicationDispatcherForward.custom(ApplicationDispatcherForward.java:253)             
  at org.apache.catalina.core.ApplicationDispatcherForward.status(ApplicationDispatcherForward.java:209)             
  at org.apache.catalina.core.ApplicationDispatcherForward.commit(ApplicationDispatcherForward.java:131)             
  at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:353)          
  ... and again the same

这是在调试器中跟踪时请求的执行方式(仅认为重要的部分:

-> /badurl
   -> DynamicMappingFilter
      -> chain.doFilter
      <- 404
      * no Stripes ActionBean found for /badurl
   <-
-> error.jsp
   -> DynamicMappingFilter
      -> chain.doFilter
         -> error.jsp
            -> /support/Error
               -> DynamicMappingFilter
                  -> chain.doFilter
                  <- 404
                  * ErrorAction found
                  -> stripesDispatcher.service
                     -> ForwardResolution.execute (/WEB-INF/pages/test.jsp)
                        -> DynamicMappingFilter
                           -> chain.doFilter
                              -> /WEB-INF/pages/test.jsp
                              <-
                           <- OK
                        <-
                        ? it does not return to ForwardResolution.execute
                        -> DynamicMappingFilter
                           -> chain.doFilter
                              -> error.jsp
                               and the loop starts again

有谁知道为什么转发到test.jsp 后会有/error.jsp 的请求?请求/error.jsp/support/Error 按预期工作 - 呈现/WEB-INF/pages/test.jsp 并完成请求。

编辑:如果error.jsp 直接转发到/WEB-INF/pages/test,则不会有任何循环。它只是在它发生时通过 Stripes 动作。

【问题讨论】:

    标签: jsp jakarta-ee stripes


    【解决方案1】:

    我认为您的“/WEB-INF/pages/test.jsp”在该 URL 中不存在,这会导致 404 错误重新开始整个事情,从而导致无限循环。

    可以直接访问“/WEB-INF/pages/test.jsp”页面没有问题吗?

    【讨论】:

    • 是的,正如我所写的那样——请求/error.jsp/support/Error 按预期工作——呈现/WEB-INF/pages/test.jsp 并且请求完成。不能直接请求/WEB-INF/pages/test.jsp
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多