对于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对象。这种方式最方便,推荐使用这种方式。

Struts2之Action的实现的更多相关文章

  1. struts2的action是多例,servlet是单例

    struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...

  2. Struts2中Action接收参数的四种形式

    1.Struts2的Action接收参数的三种形式.      a. 使用Action的属性接收(直接在action中利用get方法来接收参数):                   login.js ...

  3. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

  4. Struts2的Action(二)

    Struts2的Action可以是一个POJO(即简单的javaBean),也实现Action接口,或者继承ActionSupport类. 1.Action接口: public interface A ...

  5. Struts2之Action

    Struts2之Action MVC模式中需要有一个控制器来负责浏览器与服务器之间的通信,实现用户与服务器的交互.在Struts2框架中实现这一功能的是Action,它是整个框架最核心的部分.Acti ...

  6. 浅析Struts1和Struts2的Action线程安全问题 转

    浅析Struts1和Struts2的Action线程安全问题  转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...

  7. struts1 和 struts2中Action什么时候实例化

    精帖1:http://blog.csdn.net/lfsf802/article/details/7277013 精帖1:http://blog.csdn.net/wmj2003/article/de ...

  8. struts2的action从request获取参数值的几种方式

    使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对:$.post(url, "name=aty&age=25")和$. ...

  9. struts2 修改action的后缀

    struts2 修改action的后缀 struts2 的默认后缀是 .action 虽然很直观,但是很烦琐.很多人喜欢将请求的后缀改为 .do 在struts2中修改action后缀有两种比较简单的 ...

  10. 关于struts2中action请求会执行两次的问题

    关于struts2中action请求会执行两次的问题     在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...

随机推荐

  1. 【NOIP2014】【洛谷1941】【CJOJ1672】飞扬的小鸟

    题面 描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话, ...

  2. 【learning】多项式乘法&fft

    [吐槽] 以前一直觉得这个东西十分高端完全不会qwq 但是向lyy.yxq.yww.dtz等dalao们学习之后发现这个东西的代码实现其实极其简洁 于是趁着还没有忘记赶紧来写一篇博 (说起来这篇东西的 ...

  3. iOS学习——UITableViewCell两种重用方法的区别

    今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别.直到我在使用方法二进 ...

  4. AJAX跨域问题解决思路

    ajax跨域问题的解决思路主要分为3种: 1.浏览器限制解决思路:不让浏览器做出限制解决方法:通过指定参数,让浏览器不做跨域校验评价:价值不大,需要每个人都做改动,而且改动是客户端的改动 2.XHR请 ...

  5. C++实验指导

    选择 Build > Set Active Configuration 菜单,在对话框中选择 Win32 Debug. 当程序调试成功后,一般将其生成发布版,这样可使运行程序优化,方法是在上述对 ...

  6. Unity3D UGUI窗口拖拽

    在开发UGUI时 我们时常需要做一个窗口拖拽的功能 先上代码 using UnityEngine; using UnityEngine.EventSystems; public class DragW ...

  7. html、css简述面试题

    hTML, HTTP,web综合问题 1.前端需要注意哪些SEO 合理的title.description.keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超 ...

  8. Numpy库的下载及安装(吐血总结)

    Python很火,我也下了个来耍耍一阵子.可是渐渐地,我已经不满足于它的基本库了,我把目光转到了Numpy~~~~~ 然而想法总是比现实容易,因为我之前下的是Python3.3.x,所有没有自带pip ...

  9. 转:命令passwd报错因inode节点处理记录

    命令passwd报错因inode节点处理记录 原文:http://blog.sina.com.cn/s/blog_506ed9e6010106kj.html 故障现象:      1.修改密码时报错 ...

  10. angularjs上传图片和文件

    很简单: $scope.upload = function() { var f = $scope.myFile; var fd = new FormData(); var img = document ...