【发布时间】:2015-03-24 02:25:44
【问题描述】:
我已经在整个 SO 中搜索了这个,但没有找到具有相同症状的类似情况。我正在使用 Sruts2 并尝试在呈现我的应用程序 (index.jsp) 的主页之前调用一个操作。我真的相信这个动作没有被调用,因为我在没有被打印的动作的execute() 方法的开头有一个System.out.println()(用于调试目的)。确实 index.jsp 正在呈现(因为它是默认页面),但与操作相关的部分并未运行。总之,我认为问题可能出在struts.xml 文件中。以下是struts.xml 和操作文件:
Struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- The core configuration file for the framework is the default (struts.xml) file
and should reside on the classpath of the webapp (generally /WEB-INF/classes). -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- devMode equals debug information and reload everything for every request -->
<constant name="struts.devMode" value="true" />
<constant name="struts.ui.theme" value="simple" />
<package name="faultinjector" extends="struts-default">
<default-action-ref name="loadexperiments" />
<action name="loadexperiments" class="faultinjector.action.LoadExperimentsAction" method="execute">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
LoadExperimentsAction.java:
public class LoadExperimentsAction extends ActionSupport
{
private static final long serialVersionUID = 4L;
private ExperimentService service;
private List <Experiment> experiments;
@Override
public String execute()
{
System.out.println("Hello!");
return SUCCESS;
}
public ExperimentService getService()
{
return service;
}
public void setService(ExperimentService service)
{
this.service = service;
}
public List<Experiment> getExperiments()
{
return experiments;
}
public void setExperiments(List<Experiment> experiments)
{
this.experiments = experiments;
}
}
【问题讨论】:
-
你要去
index.jsp还是loadexperiments。您的网络服务器很可能只是呈现 index.jsp 而根本没有调用 Struts。您需要更改您的网络服务器配置。 -
Struts2 过滤器是否配置为针对您发出的请求?您可能配置错误或缺少正常运行所需的一些重要文件。您也没有在帖子中包含任何有用的信息,因此无法提供帮助。
-
好的,通过 webserserver 配置你的意思是 web.xml?如果是这样,这就是它的内容:
<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>附加到它,但没有成功。 -
好的,我遵循了@AleksandrM 的建议,并在建议的问题中作为 OP 做了。它现在正在工作(至少我知道我可以访问定义的操作)。我所做的是创建一个新的 index.jsp 文件,上面只有
<% response.sendRedirect("/FaultInjector/LoadExperiments.action"); %>,在 struts.xml 中更改<result name="success">/user_main.jsp</result>,最后将原始 index.jsp 内容放在 user_main.jsp 中。我想有一种更优雅的方法可以实现这一点,如果有人有提示请告诉我。感谢所有的努力。
标签: struts2