在之前的学习中,我们知道struts2可以将表单中的数据自动设置到处理类的属性上,还有类型转换等其他功能。那么struts2是怎样做这件事情的呢?

struts2完成这些功能是通过拦截器来完成的,并且在这个过程中数据进行迁移的动作,数据从request对象中迁移到了处理类上。完成数据迁移是由ActionContext来完成的。

1.先学习下ThreadLocal

这个类提供了线程局部(thread-local)变量,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

public class ThreadLocalTest {
public static void main(String[] args) throws InterruptedException {
//ThreadLocal是一个容器
final ThreadLocal<Integer> tl = new ThreadLocal<>();
//设置值
tl.set(20);
new Thread(new Runnable() { @Override
public void run() {
tl.set(50);
System.out.println(Thread.currentThread().getName()+"===="+tl.get());
}
}).start();
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+"======"+tl.get());
}
}

执行结果:

通过以上案例可以知道,ThreadLocal中存放的数据是线程安全的。ThreadLocal是一种典型以空间换时间的办法来做到线程安全。

2.ActionContext是Action处理类执行的上下文对象

ActionContext是一个Map结构的对象,属于一个容器。ActionContext是线程安全的。并且ActionContext在struts2执行过程中负责数据的存储。

ActionContext机制是将ServletAPI中的数据进行了解耦,在Action执行过程中,struts2都从ActionContext中获取数据。那么实现线程安全,同时也降低了执行效率。

ActionContext对象中的重要的对象

另外,ThreadLocal的不错参考网址:

https://www.cnblogs.com/dolphin0520/p/3920407.html

最新文章

  1. IOS系列swift语言之课时五
  2. CNN笔记
  3. Ubuntu 12.10 配置MyEclipes 10.7环境(加破解)
  4. iOS Error
  5. CentOS 7 安装Redis 2.8.7
  6. Replace JSON.NET with ServiceStack.Text in ASP.NET Web API
  7. struts2的java文件中不能直接弹出script对话框
  8. ubuntu压缩解压
  9. 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结
  10. Vue + element-ui
  11. 用反射写自己的DataTable转为对应的Mod
  12. JAVA编程思想(2) - 操作符(一)
  13. Object-C定时器,封装GCD定时器的必要性!!! (一)
  14. win10- *.msi 软件的安装,比如 SVN安装报2503,2502
  15. 【noip模拟】tree
  16. Linux 安装zookeeper
  17. jpa @RepositoryRestResource
  18. redis的安装使用以及在python中操作redis
  19. java linux ftp问题
  20. JSON数据的解析和生成(Swift)

热门文章

  1. Go内置函数
  2. 第12组 Beta冲刺(1/5)
  3. D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形
  4. dockerfile文件语法命令
  5. spring入门篇
  6. CEF 访问需要认证网页或接口(在Request的Headers中添加认证Token)
  7. Python numpy 中常用的数据运算
  8. leetcode 10. Regular Expression Matching 、44. Wildcard Matching
  9. App installation failed (A valid provisioning profile for this executable was not found)
  10. 改进初学者的PID-测量的比例介绍