【问题标题】:The Struts dispatcher cannot be found in struts2在 struts2 中找不到 Struts 调度程序
【发布时间】:2012-01-28 15:09:18
【问题描述】:

最初,当我单击提交按钮时,我的 jsp 页面以正确的方式显示,它显示 sql 库的类未找到异常,但随后我添加了 mysql 库,它未显示 jsp 页面并给出异常

org.apache.jasper.JasperException: 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]

根本原因

找不到 Struts 调度程序。这通常是由于使用没有关联过滤器的 Struts 标签造成的。 Struts 标签仅在请求通过其 servlet 过滤器时可用,该过滤器会初始化此标签所需的 Struts 调度程序。

请帮我解决这个问题

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" 
         version="2.5">

  <display-name>Struts2Example17</display-name>
  <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

这个错误也来了

SEVERE: log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
SEVERE: log4j:WARN No appenders could be found for logger (com.opensymphony.xwork2.config.providers.XmlConfigurationProvider).
SEVERE: log4j:WARN Please initialize the log4j system properly.
SEVERE: WebModule[/Struts2Example17]PWC1270: Exception starting filter struts2

错误跟踪

SEVERE: log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
SEVERE: log4j:WARN No appenders could be found for logger (com.opensymphony.xwork2.config.providers.XmlConfigurationProvider).
SEVERE: log4j:WARN Please initialize the log4j system properly.
SEVERE: WebModule[/Struts2Example17]PWC1270: Exception starting filter struts2
java.lang.InstantiationException
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:124)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4685)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5377)
    at com.sun.enterprise.web.WebModule.start(WebModule.java:498)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733)
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2000)
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1651)
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109)
    at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130)
    at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269)
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:294)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:462)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:382)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1064)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1244)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1232)
    at org.glassfish.deployment.admin.ReDeployCommand.execute(ReDeployCommand.java:126)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1064)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1244)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1232)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:459)
    at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:209)
    at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168)
    at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:238)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)
Caused by: Unable to load configuration. - bean - jar:file:/D:/strts2/Struts2Example17/build/web/WEB-INF/lib/struts2-dojo-plugin-2.1.8-sources.jar!/struts-plugin.xml:29:119
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:264)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:120)
    ... 47 more
Caused by: Unable to load bean: type:org.apache.struts2.views.TagLibrary class:org.apache.struts2.dojo.views.DojoTagLibrary - bean - jar:file:/D:/strts2/Struts2Example17/build/web/WEB-INF/lib/struts2-dojo-plugin-2.1.8-sources.jar!/struts-plugin.xml:29:119
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:222)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
    ... 53 more
Caused by: java.lang.ClassNotFoundException: org.apache.struts2.dojo.views.DojoTagLibrary
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1519)
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1369)
    at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:146)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:193)
    ... 56 more

JSp文件

 <%-- 
        Document   : statusdonationjsp
        Created on : Dec 20, 2011, 10:34:09 PM
        Author     : bhavishya
    --%>

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Pending Donation </title>

        </head>
        <body>

        Search String
              <s:form action="FindPendingDonation">
        <s:textfield name="detail" label="Name" />
            <s:select name="amounttype" list="{'Cash','Cheque'}" label="Paymet type" id="type" onchange="displayBlock()" />
            <s:select name="status" list="{'Paid','Unpaid'}" label="Status(Cash)" />
        <s:textfield name="amount" label="Amount" />
            <s:textfield name="responsibleparty" label="Bank Name/Responsible party"  id="cash" />
            <s:textfield name="chequeno" lable ="Cheque NO" id="chequeno"/>

            <s:submit />
    </s:form>

        </body>
    </html>

【问题讨论】:

  • 你是否在 web.xml 中将 struts 调度程序设置为过滤器?你能展示相关的部分吗?
  • 需要更多信息,当这个异常发生时你有什么配置和你点击的 URL。其中一个原因是直接点击 jsp 页面,它有 struts2 标签
  • 如果您没有问题,请使用团队查看器进行会话
  • 当你遇到这个问题时,你能告诉我你点击的 URL 吗?只需在此处处理并粘贴来自浏览器的 URL

标签: java struts2 glassfish-3


【解决方案1】:

根据讨论,问题似乎是由于直接访问 JSP 页面而不让 Struts2 Dispatcher 启动请求处理周期并创建所需的值堆栈和其他参数。

在基于 Struts 或 MVC2 的架构中,最好的方法是使用 Action,即使您的操作没有为您做任何工作。

Struts2为此提供了开箱即用的功能,如果我们没有在配置文件中提供任何动作类,Struts2将为我们动态创建一个动作类并将返回SUCCESS作为结果。所以我们需要执行以下操作我们的 struts.xml 文件

<action name="myaction">
  <result>/statusdonationjsp.jsp</result>
</action>

更新

根据新的堆栈跟踪,类路径中似乎缺少 dojo 插件。请在类路径中包含 struts2-dojo-plugin jar

【讨论】:

  • @user1047873:我让你发布你的 jsp 文件,你添加的错误消息显示它无法加载 dojo-plugin。这个 jar 在你的类路径中吗?
  • 当我运行代码时,一切正常,但下次显示错误
  • 我已经添加了jsp文件,只需向下滚动
【解决方案2】:

确保导入的 jar 具有相同的 struts2 版本。我收到这个错误是因为

Struts2-Core-2.3.15.3.jar

struts2-dojo-plugin-2.3.20

我能够通过对两个 jar 使用 2.3.15.3 版本来解决此问题。

【讨论】:

    【解决方案3】:

    此异常可能是由于 1) 在 Web.xml 中未定义过滤器或 2) 服务器未在 web.xml 中查找过滤器调度程序。只需清理项目,清理服务器并重新启动服务器。它会起作用的。

    【讨论】:

      【解决方案4】:

      我认为你的问题是你的 web.xml 文件。

      只需一次修改即可将旧过滤器标签更改为新过滤器标签

      <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
      

      所以,它应该适用于这个解决方案。但是,如果它不起作用,更好的方法是从这个链接struts.war 复制 struts-blank.war 文件。根据您的版本,我的意思是 2.x 版本,下载 2.x 一个 rar 文件并将其解压缩并在该副本中复制 struts-balnk.war 并导入到您的 ide for eg:eclipse 在该目录结构中的 web 内容下复制您的jsp 文件 100% 可以工作。

      【讨论】:

      • struts.war 链接坏了?
      【解决方案5】:

      我遇到了同样的问题。我的项目中有多个配置文件(其他文件包含在默认的 struts.xml 文件中)。 默认 struts.xml 中包含的文件名必须与单个包含的 xmls 的 匹配,并且对于所有包含的文件不应相同。在每个包含的 xmls 中给出正确的解决了这个问题。 这个链接很有用 - http://www.codejava.net/frameworks/struts/splitting-modularizing-struts2-configuration-file

      【讨论】:

        【解决方案6】:

        请检查您的项目结构,即 web.xml 在 WEB-INF 文件夹下,所有视图都在 webcontent 文件夹下

        【讨论】:

          【解决方案7】:

          我也遇到了同样的问题,也尝试按照上面评论中提到的更改jar文件,但不能解决问题。

          最后,我在我的 struts.xml 文件中发现输入错误,package 标记中的action 标记。对于action 标签的type 属性,我给出了成功或错误。 实际上,必须有name 属性而不是typetype 用于重定向页面。

          也在package 标记中有namespace 属性,我错误地输入了名称空间, 由于这个原因,我面临“找不到 Struts 调度程序”。

          但是在我纠正了我的错误之后它运行良好没有问题......所以只需检查你的 struts.xml 文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多