对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filter,根据请求的Action,来决定生成哪个Action类的实例对象。

不同与servlet,一个类要成为Action类并不需要继承任何Struts2的基类,或者实现任何接口。

public class  LoginAction

{

private   String  name;

private   Sting  password;

//name Field的setter方法和getter方法

......

//password  Field的setter方法和getter方法

.....

//Action类默认的处理用户请求的方法:execute()        类似于servlet类中service()方法

public  String   execute()

{

.........                      //处理代码

}

}

分析一下一个请求到Action中被处理的整个过程:              --------这个地方也是Struts2框架的核心

页面的一个请求,请求中有两个属性name,password     →    该请求被Struts2的核心Filter拦截  → 可能先根据常量配置对请求参数进行解析,转码等操作   →

核心Filter根据该请求所请求的Action类,生成这个Action类的实例对象(根据struts.xml配置文件的对应关系,生成实例对象利用了反射技术)    →

核心Filter把请求中属性 调用Action类的实例对象的setter方法赋给实例对象Field    →    通过Action类的实例对象调用execute()方法来处理请求,放回一个逻辑视图名   →

核心Filter根据放回的逻辑视图名  对应于struts.xml配置文件中逻辑视图名与物理视图名对应关系  ,转发到物理视图页面

由这个过程可见核心Filter对于整个过程起了举足轻重的作用,而这个核心Filter究竟是如何详细的处理的不用程序员关心 。

一个类是Action类 是不需要实现任何接口或继承任何基类的    但是Struts2框架为了使开发者开发的Struts更加规范  ,提供了Action接口和ActionSupport基类   ,程序员可以选择的进行实现或继承

Action接口     ---------包含了一些结果字符串

ActionSupport类    -------是Action接口的实现类  ,里面提供了一些默认的方法

Action访问Servlet的API

不同于Struts1, Struts2的Action没有与任何的Servlet API耦合 ,但是我们又想使用servlet中的几大对象如ServletContext对象 ,request对象  ,response对象,session对象 ,application对象怎么办?

大概有三种方式:

1.通过ActionContext类的实例对象 ,调用该类提供的方法

这种方式并不是真正的拿到了request对象,response对象 ....   那些方法返回不是request对象........,但是向其中添加值,与向request对象.....,添加值得效果相同。

2.通过让该Action类选择实现ServletContextAware接口 ,ServletRequestAware接口 ,ServletResponseAware接口

这种方式可以获得requst对象....,但是想获得某个对象,就要实现特定的接口,也不是很方便。

3.通过ServletActionContext工具类

getPageContext()

getRequest()

getResponse()

getServletContext()

这种方式可以获得pageContext对象,request对象,reponse对象,servletContext对象。这种方式最方便,推荐使用这种方式。

最新文章

  1. 二.Android手机自动化测试真机运行
  2. Core Audio(三)
  3. JavaScript中的this关键字
  4. metasploit--payload模块信息
  5. 第4章 管道和FIFO
  6. Reflect
  7. scala的下划线
  8. SQL注入中利用XP_cmdshell提权的用法(转)
  9. 股票API
  10. android style 退出动画 解决退出动画无效问题
  11. ASP.NET属性之AssociatedControlID
  12. 可供VC调用的QT编写的界面DLL方法
  13. Win8打开chm右侧空白解决方法
  14. Git多账号配置,同一电脑多个ssh-key的管理
  15. jmeter jsr223脚本引用变量的问题
  16. ifcfg命令
  17. 【读书笔记】iOS-Game Kit
  18. python全栈开发day23-面向对象高级:反射(getattr、hasattr、setattr、delattr)、__call__、__len__、__str__、__repr__、__hash__、__eq__、isinstance、issubclass
  19. 3、eclipse集成svn
  20. 关于java的一些小知识(课程作业01)

热门文章

  1. 【POJ1151】Atlantis(线段树,扫描线)
  2. 【BZOJ1305】跳舞(网络流)
  3. jxl 导出数据到excel
  4. which命令实战及原理详解-PATH实战配置
  5. angular中$q.all用法
  6. jQuery 事件代理时的this
  7. html备战春招の一
  8. css学习の第六弹—样式设置小技巧
  9. 详解apply
  10. animation,transform属性