在 Struts 2 + Tomcat 7 中使用 Eclipse Kepler 时出现资源不可用错误

问题描述 投票:0回答:2

好吧,这是我用 Java 编写的第一个应用程序,也是我第一次使用 Eclipse Kepler、Tomcat 7 和 Struts2,所以我很惊讶我竟然能走到这一步,因为我只知道 JS 和 Rails。无论如何,当您在运行 Tomcat 7 时在 IDE 中输入该 URL 时,这个基本的 Web 应用程序实际上应该输出字符串

"Success Page!"

我查看了 Tomcat 成功页面,因此我知道运行时服务器正在工作。另外,我的 IDE 中没有出现红色 x 标记。教程告诉我添加到已完成的 Web 应用程序的 URL

getTutorial.action
以便渲染
success.jsp
视图。

但是,我在 URL 处收到此错误

localhost:8080/Struts2Starter/getTutorial.action
:

message /Struts2Starter/getTutorial.action

description The requested resource is not available.

错误日志告诉我这一点:

    SEVERE: Dispatcher initialization failed
    Unable to load configuration. - action - file:/Users/jasonrodriguez/Java/apache-tomcat-7.0.47/wtpwebapps/Struts2Starter/WEB-INF/classes/struts.xml:10:76

SEVERE: Dispatcher initialization failed
Unable to load configuration. - action - file:/Users/jasonrodriguez/Java/apache-tomcat-7.0.47/wtpwebapps/Struts2Starter/WEB-INF/classes/struts.xml:10:76
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: Action class [org.koushik.javabrains.TutorialAction] not found - action - file:/Users/jasonrodriguez/Java/apache-tomcat-7.0.47/wtpwebapps/Struts2Starter/WEB-INF/classes/struts.xml:10:76
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:482)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:426)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:552)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:292)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:250)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
    ... 16 more

SEVERE: Error filterStart

我的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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Struts2Starter</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

<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>

</web-app>

我的struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="default" extends="struts-default">

        <action name="getTutorial" class="org.koushik.javabrains.TutorialAction">
            <result name="success">/success.jsp</result>
            <result name="failure">/error.jsp</result>
        </action>

    </package>

</struts>

我的TutorialAction.java:

package org.koushik.javabrains.action;

public class TutorialAction {

    public String execute() {
        System.out.println("Hello from execute");
        return"success";
    }
}

我的成功.jsp视图:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
    Success Page!
</body>
</html>

我正在努力解决这个问题。在 Rails 中,我会添加一个

binding.pry
,但在这里我对如何排除故障一无所知。据我所知,也许路由在某个地方搞砸了。

java eclipse tomcat configuration struts2
2个回答
2
投票

当 struts2 应用程序引导时,它会从

struts.xml
加载配置。它解析该文档并创建与配置相关的对象并将它们放入内部容器中。然后使用此配置对象来实例化实际对象,如操作、结果、拦截器等。在配置中指定应用程序中存在的类非常重要。 Eclipse 只能编译 Java 文件,甚至可以验证
struts.xml
的 DTD,但无法解决配置错误。 Struts2 是在引导程序上完成的。结果,您收到操作类不可解析的错误。要修复该错误,您应该提供类路径上存在的类引用。

<action name="getTutorial" class="org.koushik.javabrains.action.TutorialAction">
    <result>/success.jsp</result>
    <result name="failure">/error.jsp</result>
</action>

注意,结果名称

"success"
是结果的默认名称,可以省略。


0
投票

@Roman C 解决了问题 - 对于那些即使将文件附加到正确的操作文件中程序也无法运行的人。

问题是,随着 struts2 发布其新版本,它失去了对某些 jar 的支持。

添加 jar 文件 (commons-lang3-3.2.1.jar) 可以解决问题并让应用程序运行。

© www.soinside.com 2019 - 2024. All rights reserved.