Struts 2结果路径配置示例
在这篇文章中,我们将看到一些重要的要点,并在示例中注明了结果的位置。
<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中的位置。