从普通的jsp页面调用struts2 jsp页面

时间:2013-09-06 06:03:41

标签: jsp struts2 struts

我有一个普通的普通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      

1 个答案:

答案 0 :(得分:1)

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

How Strut2 works

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

注意:早期的Struts2开发中使用FilterDispatcher(org.apache.struts2.dispatcher.FilterDispatcher),自Struts 2.1.3开始就不推荐使用它。

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

一些有用的链接

  1. apache struts
  2. apache tutorials
  3. How Struts2 works
  4. How Struts2 works
  5. Difference between FilterDispatcher & StrutsPrepareAndExecuteFilter
  6. 希望这有帮助。