Struts2注解配置

学校刚开始教Struts2框架,完全照着我以前学过的路线再走一遍就没什么意思了,所以玩一下用Struts2的注解配置取代xml配置。

使用Struts2 注解需要导入struts2-convention-plugin-2.x.x.jar 包,Maven 添加下面这个依赖即可,由于依赖关系将自动导入core 包:
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.5.14.1</version>
</dependency>

1.@Action@Results

@Action中的value属性就是action的路径(url),@Action写在类上面时,调用的方法是默认的execute方法,results可以配置多个结果集,@Resultname是返回的结果值,type是跳转类型,location是跳转地址,先看一下代码:

@Action(value="login",results={@Result(name="success",type="redirect",location="/main.jsp"),@Result(name="error",location="/login.jsp")})
public class Struts2Action extends ActionSupport{
      
     @Override
     public String execute() throws Exception {
           return ERROR;
     }
}

我把 execute 方法的返回值设为 error ,所以访问: http://localhost:8080/projectname/login   时将转发到 login.jsp (没有设置跳转方式则默认为转发),如果不使用默认的 execute 方法,不需要在类上面写 @Action ,应该写 @Results 。并在方法上写 @Action ,且应当写上 value 属性,当方法上的注解有指定 results 时,类上面的注解的 @Results 被屏蔽:
@Results({@Result(name="success",location="/main.jsp"),@Result(name="error",location="/login.jsp")})
public class Struts2Action extends ActionSupport{
      
 @Action(value="login",results={@Result(name="success",location="/hello.jsp"),@Result(name="error",location="/login.jsp")})
     public String login(){
                return SUCCESS;
     }
      
     @Action(value="login2")
     public String login2(){
           return ERROR;
     }

如果只有 value 属性则可以省略,直接这样写:
@Action("login2")
public String login2(){
           return ERROR;
     }

2.@Namespace

这个和xml配置没什么两样,不过有个需要注意的问题,先贴一段代码:

@Namespace("/s")
@Results({@Result(name="success",location="/main.jsp"),@Result(name="error",location="/login.jsp")})
public class Struts2Namespace extends ActionSupport{
      
     @Action("login")
     public String login(){
                return SUCCESS;
     }
}

当指定的名字空间时,若是action路径不加斜杠,正确的访问路径为:http://localhost:8080/projectname/s/login 

若是有加斜杠:

@Action("/login")
     public String login(){
                return SUCCESS;
     }

则访问路径: http://localhost:8080/projectname/s/login   http://localhost:8080/projectname/login  都是正确的

3.动态方法调用

动态方法调用需要在struts.xml文件里面开启动态方法调用(上面两个配置例子是完全不需要struts.xml文件就可运行的):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
     <!-- 开启动态方法调用,即在页面用action!method -->
     <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
</struts>

新建一个 Class ,取名为一个单词或一个单词加后缀 Action ,例如: Student StudentAction ,代码如下:
@AllowedMethods("login")
@Results({@Result(name="success",location="/main.jsp"),@Result(name="error",location="/login.jsp")})
public class StudentAction extends ActionSupport{
  
     public String login(){
                return SUCCESS;
     }
}

即可通过地址:http://localhost:8080/projectname/student!login 访问,至于为什么可以这样,为什么只有满足上述的取名条件才能寻找到action,我也不知道,麻烦知道的大神也告诉我一下。。。

ps :要求写@AllowedMethods 应该是2.5 版本后新加的

文章来自我的个人博客:http://jimblog.site/blog/articles/81.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值