1 原理

三个域合一的时候相同的键值对以小的域为准。
ActionContext 对象创建:每次请求的时候都会创建一个与请求对应的 ActionContext 对象。
ActionContext 销毁:请求处理完 ActionContext 销毁。

ActionContext 的生命周期由其中生命周期最短的 request 域限制了。

问题 1:application 不应该是一个项目种只有一个吗?你每次请求都会创建 application 域
吗?

答:ActionContext 不能反过来影响其它域的生命周期。ActionContext 每次的创建只是负
责把以前那些域收集过来,然后销毁的时候只是仅仅销毁 ActionContext,并没有销毁掉
ActionContext 域。域还是以前的域,下次创建 ActionContext 对象的时候,再把
ActionContext 域取出来,然后收录进来。

问题 2:项目种可能同时存在多个 ActionContext 对象吗?

答:对。一个请求创建一个,如果是 10 个请求,就会创建 10 个 ActionContext 对象。
问题 3:如何获得当前请求的 ActionContext 对象?
答:struts2 设计的是,将 ActionContext 对象创建好后,将 ActionContext 与当前线程绑
定。我们要获得 ActionContext 对象,只需要从 ThreadLocal 获取即可。

2 通过 ActionContext

package www.test.b_api;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; //如何在action中获取原生的serveltAPI
public class Demo5Action extends ActionSupport { public String execute() throws Exception { //request域===>Map (Struts2并不推荐使用原生的request域)
//不推荐
Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request"); //推荐
ActionContext.getContext().put("name", "ActionContextTom"); //获得session域==>Map
Map<String, Object> sessionScope = ActionContext.getContext().getSession();
sessionScope.put("name", "sessionTom"); //获得application域===>Map
Map<String, Object> applicationScope = ActionContext.getContext().getApplication();
applicationScope.put("name", "applicationTom"); return SUCCESS;
} }

3  通过 ServletActionContext

package www.test.b_api;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; //如何在action中获得原生ServletAPI
public class Demo6Action extends ActionSupport { //并不推荐
public String execute() throws Exception {
//获得原生的request
HttpServletRequest request = ServletActionContext.getRequest();
//原生的session
HttpSession session = request.getSession();
//原生的application
ServletContext servletContext = ServletActionContext.getServletContext(); return SUCCESS;
} }

4 通过实现接口方式

package www.test.b_api;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class Demo7Action extends ActionSupport implements ServletRequestAware {

    private HttpServletRequest request;

    @Override
public String execute() throws Exception {
System.out.println("原生的request:"+request);
request.setAttribute("name", "zhagnsan");
return SUCCESS;
} @Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
} }

03-struts2获得servetAPI的更多相关文章

  1. 03. struts2中Action配置的各项默认值

    Action中的各项默认值 Action各项配置 <action name="helloworld" class="com.liuyong666.action.He ...

  2. Struts2常见面试点

    01.  三层和MVC的区别 http://blog.csdn.net/csh624366188/article/details/7183872 http://www.cnblogs.com/zdxs ...

  3. Java MVC框架性能比较

    Java MVC框架性能比较 - by zvane 现在各种MVC框架很多,各框架的优缺点网络上也有很多的参考文章,但介绍各框架性能方面差别的文章却不多,本人在项目开发中,感觉到采用了struts2框 ...

  4. struts2 笔记03 异常支持、防止页面刷新和后退、方法验证

    Struts2对异常支持(声明式异常.自动的异常处理), 异常处理(运行期异常事务自动回滚) 1. 自定义异常类,继承RuntimeException或Exception实现构造方法. 2. 配置异常 ...

  5. struts2.1笔记03:AOP编程和拦截器概念的简介

    1.AOP编程 AOP编程,也叫面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容.利用A ...

  6. Struts2笔记03——架构(转)

    原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm 架构(很重要!尤其是图!) 从一个比较高的层次来看,St ...

  7. ???Struts2框架03 session的使用、登录逻辑【session工作原理】

    1 登录逻辑 1.1 获取登录数据(例如:用户名.密码) 1.2 在控制层调用业务层来验证数据信息 1.3 登录成功:保存用户信息(服务器用session.浏览器用cookie),跳转到主页面 1.4 ...

  8. Struts2+DAO层实现实例03——添加监听器跟踪用户行为

    实例说明 根据上两次的成品进行二次加工. 加入Listener,监听用户的登陆注销情况. 所用知识说明 采用SessionBindingListener对Session进行监听. 同时,Action中 ...

  9. Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)

    注:该系列文章部分内容来自王健老师编写SSH整合开发教程 目的:通过Spring创建数据库的连接,并通过Spring进行事务管理. 第一步:将Spring的包拷贝至当前项目的lib文件夹下,例如以下图 ...

  10. Struts2学习笔记03 之 Result组件

    二.Result原理 1.stream 2.redirectAction 3.Json

随机推荐

  1. 解决dragsort鼠标拖动与onclick事件共存

  2. 关于GNU规范的语法扩展

    GNU 是一款能用于构建类 Unix 操作系统的计算机软件合集,由自由软件之父 Richard Stallman 开创,于 1983 年 9 月 27 日对外发布.GNU 完全由自由软件(free s ...

  3. Multimap的初使用

    之前不知道这个类型使用,在朋友的推荐下进行了个实际操作. 类似这种查询,我需要将他们归类拿出来,如果招以前那么拿的话可能要套挺多个循环的. 首先根据查询得到一个 List<Map<Stri ...

  4. kali linux之端口扫描

    端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入 发现开放的端口,有更具体的攻击面 nmap hping3 scapy都可以 nmap隐蔽扫描 扫描抓包 nmap僵尸扫描 先发现僵尸机,僵尸 ...

  5. 洛谷 P3376【模板】网络最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...

  6. win7运行nodejs,返回IPV6:::ffff:127.0.0.1

    问题: 在win7上使用telnet连接node生成的服务器,在获取ip的过程中出现的问题. win7默认开启IPV6,所以获取的IP地址带有::ffff:前缀. 如果程序中使用到了IP地址,有可能会 ...

  7. P3704 [SDOI2017]数字表格 (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3704 [题解] https://www.luogu.org/blog/cjyyb/solution-p3 ...

  8. [SP1825] Free tour II

    /* ----------------------- [题解] https://www.luogu.org/blog/IRving1-1/solution-sp1825 --------------- ...

  9. 一款不错的Linux终端颜色设置

    PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ " #步骤# vi ...

  10. request.getRequestDispatcher()跳转+中文乱码

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...