Struts 2结果路径配置示例

时间:2020-02-23 14:36:05  来源:igfitidea点击:

在这篇文章中,我们将看到一些重要的要点,并在示例中注明了结果的位置。

<package name="user" namespace="/User" extends="struts-default">
	<action name="home">
		<result>results/login.jsp</result>
	</action>
</package>

上面是struts.xml文件中的代码段,请注意result元素不是以正斜杠(/)开头。
在这种情况下,struts将在{WEBAPP-ROOT}/{Namespace}/{result}路径中查找结果JSP页面。
因此,我们的JSP文件应该位于WEBAPP/User/results /目录中。

但是,如果result元素以正斜杠开头,则struts将在根文件夹中查找文件。
因此,如果struts.xml文件包元素为:

<package name="user" namespace="/User" extends="struts-default">
	<action name="home">
		<result>/results/login.jsp</result>
	</action>
</package>

然后,struts将在WEBAPP/results /目录中查找结果页面。

现在看下面的包声明。

<package name="user" namespace="/User/" extends="struts-default">
	<action name="home">
		<result>/login.jsp</result>
	</action>
</package>

由于名称空间以" /"结尾,因此即使结果元素以正斜杠开头,struts也会在WEBAPP/User/login.jsp中查找结果。

让我们看看如果使用基于注释的配置,如何配置结果路径。

@Namespace("/Test")
@Action("test")
@Result(location="results/login.jsp")
public class TestAction extends ActionSupport {

}

在上述情况下,struts将尝试在WEB-INF/content/Test/results/login.jsp中定位文件。

通常我们不将JSP或者HTML文件放在WEB-INF目录中,因此我们可以提供@Result位置属性值(以正斜杠开头),以使Struts在项目根目录中查找文件。

如果我们将@Result注释上方的内容更改为@Result(location ="/results/login.jsp")",则struts将在WEBAPP/results/login.jsp中查找文件

我们还可以使用@ResultPath批注提供结果页面路径。

@Namespace("/Test")
@Action("test")
@ResultPath("/jsps")
@Result(location="login.jsp")
public class TestAction extends ActionSupport {

}

Struts将在WEBAPP/jsps/Test /目录中查找login.jsp。

如果要将结果路径从WEB-INF/content目录全局更改为其他目录,则可以通过struts配置文件来完成。

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

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.convention.result.path" value="/"></constant>
</struts>

这些都是为了配置结果页面在Struts 2中的位置。