基于注解的配置返回jsp视图
本篇接上文使用struts2-convention-plugin及注解注册action,记录使用convention插件及注解的情况下,如何返回jsp视图
1.convention插件配置
convention插件很多配置相都有默认值,一般来说直接使用是没用问题的,但是为了学习,搞清楚具体的配置项,每一项都会配置,即使只是默认值。
1.1.配置jsp视图的存放位置
在默认的情况下jsp视图页面都应该存储在WEB-INF/content下,可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。现在我们将它配置到page文件夹
<!-- 配置jsp试图存放位置 -->
<constant name="struts.convention.result.path" value="/WEB-INF/page" />
1.2.配置扫描相关
<!-- 扫描什么包 -->
<constant name="strutsnvention.package.locators" value="action" />
<!-- 扫描那些后缀的类-->
<constant name="struts.convention.action.suffix" value="Action"/>
<!-- 默认名称转换规则 骆驼峰变小写 并在中间加上- -->
<constant name="struts.convention.action.name.separator" value="-" />
<!-- 是否扫描没有加@Action的类 -->
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<!-- 扫描web-service 架包下的action -->
<constant name="struts.convention.action.includeJars" value=".*?/web-service.*?jar(!/)?,.*?/web-service*?jar(!/)?"></constant>
2.创建java action
在com.fyuhome.action.test包下建立action。
package com.fyuhome.action.test;
public class TestSuAction {
public String execute() throws Exception {
System.out.println("execute@@@@@@@@@@@@@@@@@@@@@@");
return "success" ;
}
public String add() throws Exception {
System.out.println("add@@@@@@@@@@@@@@@@@@@@@@");
return "add" ;
}
public String test() throws Exception {
System.out.println("add@@@@@@@@@@@@@@@@@@@@@@");
return "test" ;
}
}
无需任何配置(约定大于配置),该类自动变成action。
由于该类在com.fyuhome.action.test包下,而配置的扫描路径为action,故该action的命名空间为test。
按照约定action的名称是类名称去掉Action的小写,如果存在骆驼峰形式的命名,则在骆驼峰之间加上-(由struts.convention.action.name.separator配置)
看代码我实现了execute 方法,故访问http://localhost:8080/web-war/test/test-su.action 即可访问到execute。
其他的方法通过动态方法的方式访问,比如add方法的访问地址为http://localhost:8080/web-war/test/test-su!add.action
3.创建jsp视图
点击第二章节的路径,返现项目报错了,提示没有找到视图。这是由于我们没有在视图文件夹创建相关的jsp导致的。
阅读第二章节的代码,发现相关方法中返回了success test add三个字符串,同时该action的命名空间为/test,故
<constant name="struts.convention.result.path" value="/WEB-INF/page" />
该目录下建立test文件夹,并在该文件夹下建立test-su-success.jsp test-su-test.jsp test-su-add.jsp。命名规则是action名称-返回值.jsp。
按该规则建立的jsp自动会被注册成返回视图,即使并没有对应的action。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX10keaVHbHNWdGdVZxw2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TM2EDNxYjMwEDOxQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如图所示none视图并没有对应的action,但是仍然被注册成视图。
4.使用注解进行特殊配置
struts2的注解的使用可以参考官方文档。
[email protected]注解将!转换成-
如果不希望在接口调用时使用!,防止后台使用的框架被暴露,可以在具体的方法中使用@Action注解。
@Action(value = "test-su-add")
public String add() throws Exception {
System.out.println("add@@@@@@@@@@@@@@@@@@@@@@");
return "add" ;
}
4.2使用results配置返回页面
由于使用了@Action注解,add方法已经被独立出来,action的名称变成test-su-add,这个action会自动价值test-su-add.jsp和test-su-add-*.jsp,如果需要指定加载其他视图,可以使用results属性。
@Action(value = "test-su-add",results = {@Result(name="add",location="test-su-add.jsp"),@Result(name="error",location="test-su-error.jsp")})
public String add() throws Exception {
System.out.println("add@@@@@@@@@@@@@@@@@@@@@@");
return "dd" ;
}
5.使用配置的形式将!转换为-
使用@Action注解的形式在方法比较麻烦,而且jsp视图的默认名称会发生变化,是同配置文件通配符可以解决再过问题
在struts.xml配置文件中加入
<package name="basePackage" extends="struts-default">
<action name="test_su_*" method="{1}" class="com.fyuhome.action.test.TestSuAction"></action>
</package>
即可。