天天看点

【struts2笔记二】配置struts2返回jsp视图基于注解的配置返回jsp视图

基于注解的配置返回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。

【struts2笔记二】配置struts2返回jsp视图基于注解的配置返回jsp视图

如图所示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" ;  
} 
           
【struts2笔记二】配置struts2返回jsp视图基于注解的配置返回jsp视图

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>
           

即可。