好的,这是我的第一个用Java编写的应用程序,也是我第一次使用Eclipse Kepler,Tomcat 7和Struts2编写的应用程序,所以我感到惊讶的是,我所知道的只是JS和Rails,甚至还没有实现。无论如何,"Success Page!"当您在运行Tomcat 7的过程中在IDE中输入该URL时,该基本的Web应用程序实际上只是输出字符串。
"Success Page!"
我查看了Tomcat成功页面,所以我知道运行时服务器正在运行。另外,我的IDE中没有红色x标记。该教程告诉我添加到getTutorial.action完成的Web应用程序的URL 中以呈现success.jsp视图。
getTutorial.action
success.jsp
但是,我在url处收到此错误localhost:8080/Struts2Starter/getTutorial.action:
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"; } }
我的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中,我会抛出a,binding.pry但是在这里我丝毫没有提示如何进行故障排除。我所能说的最好,也许是某个地方的路由混乱了。任何见解都会非常有帮助,谢谢!
binding.pry
当struts2应用程序引导时,它将从中加载配置struts.xml。它解析该文档并创建与配置相关的对象,并将其放入内部容器。然后使用此配置对象实例化实际对象,例如动作,结果,拦截器等。在应用程序中存在的配置中指定类非常重要。Eclipse只能编译Java文件,甚至可以验证DTD的DTD,struts.xml但不能解决配置错误。Struts2正在引导程序上执行此操作。结果,您收到错误,指出无法解决操作类。要解决该错误,您应该提供类路径中存在的类引用。
struts.xml
<action name="getTutorial" class="org.koushik.javabrains.action.TutorialAction"> <result>/success.jsp</result> <result name="failure">/error.jsp</result> </action>
注意,结果名称"success"是结果的默认名称,可以省略。
"success"