【struts2】Action的实现

来源:互联网 发布:windows api 窗口置顶 编辑:程序博客网 时间:2024/04/27 20:42

         Struts2作为一个MVC框架,C,也就是controler(Action)才是应用的核心,在应用程序的开发中我们需要写大量的Action,Action类里包含了对用户请求的处理逻辑,Action类也被称为业务控制器。下面就来总结一下Action的实现。

 

一些特点

1. Action采用了低侵入式设计(不要求Action类继承任何的Strusts2基类或接口)

2. struts2通常直接使用Action类封装HTTP请求参数,因此,Action类中还应该包含与请求参数对应的属性,并为这些属性提供setter和getter方法.(struts2是通过对应的getter和setter方法来处理请求参数的,而不是通过字段名。举例说如果请求参数包含userName字段,Action是否包含userName这个成员变量并不重要,重要的是要包含setUserName(String userNmae) 和 String getUser()两个方法)

3.Action属性不仅可以封装请求参数还可以用于封装处理结果.


Action接口和ActionSupport基类

         Action接口的定义是为了让Action类的开发更加规范。在Action接口里定义了一个execute方法,该接口的规范规定了Action类应该包含一个execute方法,该方法返回一个字符串,除此之外,该接口还定义了5个字符串常量,用来统一execute的返回值。当然,开发者也可以自己定义返回的字符串。

        

public interface Action {      //定义Action接口里包含的一些结果字符串      public static final String ERROR = "error";      public static final String INPUT = "input";      public static final String LOGIN = "login";      public static final String NONE = "none";      public static final String SUCCESS = "success";      //定义处理用户请求的execute()方法      public String execute() throws Exception;  }  

另外ActionSupport是一个默认的Action实现类,该类里已经提供了许多默认的方法,这些默认的方法包含获取国际化信息的方法、数据校验、默认的处理用户请求的方法。如果我们在配置Action时没有指定Class属性,系统会自动使用ActionSupport类作为Action处理类。


Action访问ServletAPI

       Struts2的Action并没有与任何的ServletAPI 耦合,但是对于Web应用而言不访问ServletAPI几乎是不可能的。Web应用中通常需要访问的ServletAPI就是HttpServletRequest、HttpServletSession、ServletContext这3个接口分别对应JSP内置对象中的request、session和appllication。Struts2提供了一个ActionContext类,Action可以通过该类来访问ServletAPI。

      下面通过一个例子来看一看如何在Action中使用ActionContext类。

       

public Class LoginAction implements Action{private String username;private String password;//省略username、password的setter、getter方法public String execute() throws Exception{ActionContext ctx=ActionContext.getContext();//通过ActionContext访问application范围的属性值Integer counter=(Integer)ctx.getApplication().get("counter");if(counter == null){counter=1;}else{counter=counter+1;}//通过ActionContext设置application范围的属性值ctx.getApplication.put("counter",counter);//通过ActionContext设置session范围的属性值ctx.getSession.put("user",getUsername());if(getUsername().equals("tgb")&& getPassword().equals("tgb"))    {//通过ActionContext设置request范围的属性值ctx.put("tip","服务器提示:您已经成功登陆!");return SUCCESS;}else{//通过ActionContext设置request范围的属性值ctx.put("tip","服务器提示:登陆失败!")}}}

      通过以上的总结,我们发现Action的实现其实很简单,只要我们编写一个普通的类就可以了 。但是为了让开发更规范提供了一个Action接口,同时也为该类提供了一个实现类ActionSupport。

 

 

0 0
原创粉丝点击