【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。
- 【struts2】Action的实现
- Struts2的动态Action实现
- struts1 与struts2 Action的配置实现
- Struts2中Action的实现方式
- Struts2 action的三种实现方式
- Struts2 Action的三种实现方法
- 《研磨struts2》第四章 Action 之 4.2 Action的实现
- Struts2-----5、Struts2实现Action
- struts2-实现Action
- Struts2的Action
- struts2的action基础
- Struts2的Action(上)
- Struts2的Action(下)
- Struts2的Action
- STRUTS2的Action配置
- Struts2 的 Action
- Struts2 Action的单元测试
- Struts2的Action
- hibernate 缓存机制详细分析
- 数据流中的中位数
- 白帽、灰帽和黑帽
- C++ 处理输入包含特定信息的字符串
- 51nod 1107 逆序对
- 【struts2】Action的实现
- 大话数据结构读书笔记 3---串
- 程序是如何执行的(三)函数调用
- gem install安装报SSL证书错误的解决办法
- 逆序建立链表
- 算法导论第六章-堆排序c++
- 线段树扫描线hdu1828Picture
- 傅里叶变换的简单理解
- 程序员之工具杂烩