0

我有一个现有的普通 jsp Web 应用程序。根据客户要求,我需要创建一些带有下拉选择框的配置页面。我必须在 Struts 2 中创建这个页面。我已经创建了一个 struts 页面,但是我无法从我现有的应用程序中调用这个 struts2 页面。

我得到以下错误。

The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]
    at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60)
    at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44)
    at org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:48)
    at jsp_servlet.__addprevdn._jsp__tag0(__addprevdn.java:112)
    at jsp_servlet.__addprevdn._jspService(__addprevdn.java:84)
    Truncated. see log file for complete stacktrace      
4

1 回答 1

1

正如 Umesh Awasthi 所说,你不能那样做。您需要了解一些 Struts2 的基础知识。

Strut2 的工作原理

  • 首先,客户端请求通过 Servlet 容器,例如 Tomcat。然后客户端请求通过一个链式系统,其中涉及到 Servlet 过滤器的三个组件。
  • 在链接系统中,首先HttpServletrequest通过ActionContextCleanUp过滤器。与或一起ActionContextCleanUp工作,并允许与.FilterDispatcherStrutsPrepareAndExecuteFilterSiteMesh
  • 接下来FilterDispatcher调用ActionMapper来确定哪个请求应该调用一个动作。它还处理执行动作、清理ActionContext和提供静态内容,如 JavaScript 文件、CSS 文件、HTML 文件等,只要 Struts2 的各个部分需要它们。
  • 映射 HTTP 请求和操作调用请求,ActionMapper反之亦然。如果没有操作调用请求匹配,ActionMapper则可能返回一个操作或返回空值。
  • ActionMapper需要调用 Action 时,ActionProxy通过与FilterDispatcher. ActionProxy获取 Action 类并调用适当的方法。struts.xml此方法参考从文件初始化的框架配置管理器。
  • 读取struts.xml文件后,ActionProxy创建一个ActionInvocation& 决定如何处理 Action。
  • ActionProxy封装了一个 Action 应该如何被获取,&ActionInvocation封装了当一个请求被调用时 Action 是如何被执行的。
  • 然后在ActionProxy的帮助下调用拦截器ActionInvocation。拦截器的主要任务是使用ActionInvocation.
  • 一旦确定并执行了 Action,就会使用Result组件生成结果。在模板中映射的动作结果代码的帮助下模板中的Result组件查找数据struts.xml可能包含用于生成响应的JSP、FreeMarker。

注意: ( FilterDispatcherorg.apache.struts2.dispatcher.FilterDispatcher) 用于早期的 Struts2 开发,自 Struts 2.1.3 起已弃用。

如果您使用的 Struts 版本 >= 2.1.3,则始终建议升级新的过滤器类 - StrutsPrepareAndExecuteFilter(org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter)。

一些有用的链接

  1. 阿帕奇支柱
  2. 阿帕奇教程
  3. Struts2 的工作原理
  4. Struts2 的工作原理
  5. FilterDispatcher 和 StrutsPrepareAndExecuteFilter 的区别

希望这可以帮助。

于 2013-09-06T14:20:48.263 回答