struts2注解

本文内容:

一.使用注解方式的好处

二.Java注解方式写法

三. Java注解具体实现 

四.Java注解的其他写法


一.使用注解方式的好处

Struts2中声明架构有2种方式,一种是xml的方式,一种Java注解的方式。对于Java注解的方式,它没有xml文件,所有的元数据都集中放在Java注解中,这些注解直接驻留在实现动作的类对应的Java源代码中。

很多人觉得Java注解是一种比较优雅的解决方案。有些XMl元素中必须显示指定的信息,可以从注解的类所隶属的Java包结构自动推断出来,也减少了多年以来在Web应用程序类路径下积累的XML文件的混乱状况。

(PS:个人觉得XML的也还好,大不了我把XML分割成几个独立的XML,必要时多写几行注释不就OK了)


二.Java注解方式写法

总结常用注解:

Namespace:指定命名空间。

ParentPackage:指定父包。

Result:提供Action结果的映射。

Results:Result注解列表。

Action:指定Action的访问URL。

Actions:Action注解列表。

@Namespace("/XXX")  //不需要指定也可以。

@ParentPackage("struts-default")  //不需要指定也可以。

@Result(name = "success",location = "/MyJsp.jsp")

@Results({ 

@Result(name = "success",location = "/MyJsp.jsp"),

@Result(name = "error",location = "/index.jsp")

})

@Action(value = "abc")

@Actions( { @Action("/one/url"), @Action("/another/url") })

一般来说,Action会配合Results属性一起使用。如:

@Action(value = "/H5/url", results = { 

@Result(name = SUCCESS, location = "/H5/success.jsp"),  

@Result(name = "failure", location = "/H5/fail.jsp") 

})


三. Java注解具体实现

1.需要告诉框架动作类在哪里。

所以需要在web.xml中的FilterDispatcher中配置actionPackages属性,如下:

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
  <init-param>
    <param-name>actionPackages</param-name>
    <param-value>action</param-value>
  </init-param>	
</filter>

2.告诉框架动作类在哪里还是不够的,需要以某种方式标记哪些类是动作类。方法有2.

一.实现Action接口。

二.使用命名约定,即让类名以Action结尾。

当然,你即实现Action接口,也以Action结尾也是可以的。


3.具体实例:我建的Web工程如下:

Web.xml文件如下:

    <filter>  
      
     <filter-name>struts2</filter-name>  
      
     <filter-class>  
      
     org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
      
     </filter-class>  
      
     <init-param>  
      
        <param-name>actionPackages</param-name>  
      
        <param-value>action</param-value>  
      
      </init-param>  
      
    </filter>  

Index.jsp页面如下:

<body>  
  
   <a href = "/test/test.action">test1.action</a>  
</body> 
TestAction代码如下:

    package com.my.action;  
      
    import org.apache.struts2.convention.annotation.Namespace;  
    import org.apache.struts2.convention.annotation.ParentPackage;  
    import org.apache.struts2.convention.annotation.Result;  
    import org.apache.struts2.convention.annotation.Results;  
    import com.opensymphony.xwork2.ActionSupport;  

    @Namespace("/test")  //不需要指定也可以。不指定时jsp页面的/test/的这个命名空间也要去掉  
    @ParentPackage("struts-default")  //不需要也可以  
 
    /* 
     * 相当于指定全局结果 
     */  
    @Results({   
    @Result(name = "success",location = "/Success.jsp"),  
    @Result(name = "error",location = "/Error.jsp")  
    })  

    /* 
     * @Result(name = "error",location = "/index.jsp") 
     * 这个也是相当于指定全局结果,只不过这个是指定一个返回,上面是指定多个。 
     */  
      
    public class TestAction extends ActionSupport{  
    public String execute() throws Exception  
    {  
    return SUCCESS;  
    }  
    }  

四.Java注解的其他写法

1.假如多个action响应同一个函数怎么办?

2.一个TestAction类中有多个方法,分别响应不同的action。

3.正常点的类(一个TestAction类中有多个方法,分别响应不同的action。各自action有各 自的返回值)

 

对于1:

    public class TestAction extends ActionSupport{  
          
        @Actions({   
            @Action("test"),  
            @Action("test1")  
            })  
        public String execute() throws Exception  
        {  
            return SUCCESS;  
        }  
    }  
对于 2
    public class TestAction extends ActionSupport{  
          
        /* 
         * 这个execute()方法默认就是test.action对应响应的方法 
         */  
        public String execute() throws Exception  
        {  
            return SUCCESS;  
        }  
          
        @Action("test1")  
        public String test2()   
        {  
            return ERROR;  
        }  
    }  
对于 3

    public class TestAction extends ActionSupport{  
          
        /* 
         * 这个execute()方法默认就是test.action对应响应的方法 
         */  
        public String execute() throws Exception  
        {  
            return SUCCESS;  
        }  
          
        /* 
         * 不同action响应同一个方法,但是对返回的结果处理不同 
         */  
        @Actions({  
            @Action(value = "test1",results = {  
                @Result(name = "yes",location = "/Success.jsp"),  
                @Result(name = "no",location = "/Error.jsp")  
            }),  
            @Action(value = "test2",results = {  
                    @Result(name = "yes",location = "/Error.jsp"),  
                    @Result(name = "no",location = "/Success.jsp")  
                }),  
        })  
        public String test1_2()   
        {  
            return "yes";  
        }  
          
        /* 
         * 普通的一个action对应的方法,不同返回值跳转页面不一样 
         */  
        @Action(value = "test3",results = {  
                @Result(name = "yes",location = "/Success.jsp"),  
                @Result(name = "no",location = "/Error.jsp")  
            })  
        public String test3()   
        {  
            return "no";  
        }  
    }  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值