2

尝试使用 ant 部署我的应用程序时出现错误。当我从 intellij 运行应用程序时,它会正确部署和运行。但是,当我使用 ant 构建和部署时,出现错误:

There is no Action mapped for namespace [/] and action name [CheckLogin] associated with context path [].

我已经包含了我的 ant build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="cars" default="all">
  <property file="build.properties"/>
  <property name="dist.dir" location="${basedir}/dist"/>
    <property name="tomcat.deploydir" location="/Users/bernardoneill/apache-tomcat-7.0.32/webapps"/>

    <target name="init" description="Build initialization"/>


    <target name="setup">
        <mkdir dir="dist" />
        <echo>Copying web into dist</echo>
        <copydir dest="dist/web" src="web" />
        <copydir dest="dist/web/WEB-INF/lib" src="${basedir}/web/WEB-INF" />
        <copydir dest="dist/web/WEB-INF/lib" src="${basedir}/lib" />

    </target>

    <target name="compile">
        <delete dir="${dist.dir}/web/WEB-INF/classes" />
        <mkdir dir="${dist.dir}/web/WEB-INF/classes" />
        <javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="${basedir}/src">
            <classpath>
                <fileset dir="${basedir}/web/WEB-INF">
                    <include name="*" />
                </fileset>
            </classpath>
            <classpath>
                <fileset dir="${basedir}/lib">
                    <include name="*" />
                </fileset>
            </classpath>
        </javac>
        <copy todir="${dist.dir}/web/WEB-INF">
            <fileset dir="src">
                <include name="**/*.properties" />
                <include name="**/*.xml" />
            </fileset>
        </copy>
    </target>

    <target name="buildwar">
        <war basedir="${basedir}/dist/web" destfile="ROOT.war"
             webxml="${basedir}/dist/web/WEB-INF/web.xml">
            <exclude name="WEB-INF/**" />
            <webinf dir="${basedir}/dist/web/WEB-INF/">
                <include name="**/*.jar" />
            </webinf>
        </war>
    </target>

    <target name="deploy">
        <copy file="ROOT.war" todir="${tomcat.deploydir}" />
    </target>

    <target name="all" depends="setup,compile,buildwar,deploy"></target>
</project>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="Cars" extends="struts-default" namespace="/">
        <action name="login">
            <result>/index.jsp</result>
        </action>
        <action name="CheckLogin" class="main.model.LoginResult">
            <result name="SUCCESS" type="chain">loadCars</result>
            <result name="ERROR">/index.jsp</result>
        </action>
        <action name="carList">
            <result>/HelloWorld.jsp</result>
        </action>
        <action name="manageUsers">
            <result>/ManageUsers.jsp</result>
        </action>
        <action name="loadCars" class="main.action.CarAction" method="execute">
            <result name="success" type="chain">selectCar</result>
        </action>
        <action name="selectCar">
            <result name="success">/selectCar.jsp</result>
        </action>
        <action name="hello" class="main.action.HelloWorldAction" method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>
        <action name="add"
                class="main.action.UserAction" method="add">
            <result name="success" type="chain">manageUsers</result>
            <result name="input" type="chain">manageUsers</result>
        </action>
        <action name="delete"
                class="main.action.UserAction" method="delete">
            <result name="success" type="chain">manageUsers</result>
        </action>

        <action name="addCar"
                class="main.action.CarAction" method="add">
            <result name="success" type="chain">selectCar</result>
            <result name="input" type="chain">selectCar</result>
        </action>
        <action name="deleteCar"
                class="main.action.CarAction" method="delete">
            <result name="success" type="chain">selectCar</result>
        </action>
    </package>
</struts>

另外,这是我的一些日志...

Nov 12, 2012 11:25:44 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 10215 ms
Nov 12, 2012 11:25:47 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: No configuration found for the specified action: 'CheckLogin' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
Nov 12, 2012 11:25:48 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: No configuration found for the specified action: 'CheckLogin' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
Nov 12, 2012 11:25:55 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: Could not find action or result
There is no Action mapped for namespace [/] and action name [CheckLogin] associated with context path []. - [unknown location]
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Nov 12, 2012 11:28:57 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: No configuration found for the specified action: 'CheckLogin' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
Nov 12, 2012 11:28:58 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: No configuration found for the specified action: 'CheckLogin' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
Nov 12, 2012 11:29:00 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger warn
WARNING: Could not find action or result
There is no Action mapped for namespace [/] and action name [CheckLogin] associated with context path []. - [unknown location]
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:501)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
4

1 回答 1

0

(进一步澄清 Mohana 的评论。)

参考build.xml文件的以下部分:

<target name="compile">
    ...
    <javac destdir="${dist.dir}/web/WEB-INF/classes" srcdir="${basedir}/src">
    ...
    <copy todir="${dist.dir}/web/WEB-INF">
        <fileset dir="src">
            <include name="**/*.properties" />
            <include name="**/*.xml" />
        </fileset>
    </copy>
</target>

Struts 2 配置将在WEB-INF目录中结束,而 S2 期望它在类路径中。

于 2012-11-13T14:05:16.747 回答