对于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. 【BZOJ3730】震波(动态点分治)

    [BZOJ3730]震波(动态点分治) 题面 BZOJ 题意 给定一棵树, 每次询问到一个点的距离\(<=K\)的点的权值之和 动态修改权值, 强制在线 题解 正常的\(DP\)??? 很简单呀 ...

  2. 【BZOJ4003】【JLOI2015】城池攻占(左偏树)

    题面 题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池.这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi ...

  3. Bzoj2946:[POI2000] 最长公共子串

    题面 求多个串的最长公共子串 Sol 套路,拼在一起,二分答案+后缀数组判定 把大于答案的\(height\)分组,然后计算出一个组内是否有所有串的后缀 由于串只有\(5\)个开个桶就好了 # inc ...

  4. c++ STL容器适配器

    一.标准库顺序容器适配器的种类     标准库提供了三种顺序容器适配器:queue(FIFO队列).priority_queue(优先级队列).stack(栈)   二.什么是容器适配器     &q ...

  5. Django 2.0 学习(03):Django视图和URL(下)

    接上篇博文,继续分析Django基本流程. 编写第一个(view)视图函数 1.打开文件polls/views.py,输入下面的Python代码: from django.http import Ht ...

  6. NOIP2017 总结

    联赛结束,但是我并没有得到预期的结果,特写此文分析原因,希望我不会就此退役. 回顾一年,我做了什么? 2016年联赛,我水了两天,抱着挂掉的心态拿到了1=. 2016-2017寒假,参加集训,三天考试 ...

  7. Selenium和Firefox兼容问题

    运行时遇到错误: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on p ...

  8. Js基本函数 2017-03-20

    自定义函数:  Var  y = xxx (参数) xxx. yyy():表示引用这个类的方法:如document.write() xxx.yyy: 表示引用这个类的属性: 如:atrr.lenth ...

  9. 使用openssl演练数字签名

    以下代码摘自网上,设置一个server和client,client代码如下: package main import (    "fmt"    "io/ioutil&q ...

  10. 剑指Offer-对称的二叉树

    package Tree; /** * 对称的二叉树 * 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. */ public class ...