我正在NetBeans 7.2.1的struts 2.3.16上尝试我的第一个应用程序。输入URL时显示以下错误- http://localhost:8080/TestStruts/Test.action(有一个Test.jsp页面)。
http://localhost:8080/TestStruts/Test.action
Test.jsp
WARNING: Could not find action or result: /TestStruts/Test.action There is no Action mapped for namespace [/] and action name [Test] associated with context path [/TestStruts]. - [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:37) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) 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:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 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:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
该Test.jsp页面:
<s:form namespace="/TestStruts" action="test"> <table border="0" class=""> <tr> <td> <s:textfield id="name" name="name" label="Enter your name"/> </td> </tr> <tr> <td> <s:textfield id="email" name="email" label="Enter your email"/> </td> </tr> <tr> <td></td> <td><s:submit value="Submit"/></td> </tr> </table> </s:form>
动作类:
package actions; import com.opensymphony.xwork2.ActionSupport; public final class TestAction extends ActionSupport { private static final String SUCCESS = "success"; private String name; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String execute() throws Exception { System.out.println("name = "+name); System.out.println("email = "+email); return SUCCESS; } }
该strtus.xml文件中:
strtus.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> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.custom.i18n.resources" value="myapp" /> <package name="test" namespace="/TestStruts" extends="struts-default"> <action name="test" class="actions.TestAction" method="execute"> <result name="success">/Test.jsp</result> </action> </package> </struts>
该web.xml文件中:
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
除了Spring的jar文件外,我还添加了以下jar文件到类路径中。
当URL .jsp从from 更改为.actionlike时http://localhost:8080/TestStruts/Test.jsp,它显示以下警告。
.jsp
.action
http://localhost:8080/TestStruts/Test.jsp
Dec 22, 2013 9:00:44 PM org.apache.struts2.components.ServletUrlRenderer warn WARNING: No configuration found for the specified action: 'test' in namespace: '/TestStruts'. Form action defaulting to 'action' attribute's literal value. Dec 22, 2013 9:00:45 PM org.apache.struts2.components.ServletUrlRenderer warn WARNING: No configuration found for the specified action: 'test' in namespace: '/TestStruts'. Form action defaulting to 'action' attribute's literal value.
我想念什么?
因为/TestStruts是部署应用程序的上下文路径。它与包中的名称空间具有相同的路径。尝试
/TestStruts
http://localhost:8080/TestStruts/TestStruts/test.action
当URls从struts标记渲染时,它正在尝试查找相应的动作配置。如果找不到配置,则发出警告。