java之struts2的ThreadLocal和ActionContext
在之前的学习中,我们知道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
java之struts2的ThreadLocal和ActionContext的更多相关文章
- struts2 之 ThreadLocal 和 ActionContext
1. ThreadLocal:该类提供了线程局部(thtead-local)变量.threadLocal是一个容器,该容器中存放的数据可以保证线程安全. 案例如: public class Threa ...
- Struts2之ValueStack、ActionContext
今天在看Action获取Resquest.Response时,发现了一个词:值栈.于是今天一天都在看,了解了值栈不仅能知道Action怎么获取request.response等这些,还会了解OGNL语 ...
- Java多线程10:ThreadLocal的作用及使用
ThreadLocal的作用 从上一篇对于ThreadLocal的分析来看,可以得出结论:ThreadLocal不是用来解决共享对象的多线程访问问题的,通过ThreadLocal的set()方法设置到 ...
- Java并发编程之ThreadLocal源码分析
## 1 一句话概括ThreadLocal<font face="微软雅黑" size=4> 什么是ThreadLocal?顾名思义:线程本地变量,它为每个使用该对象 ...
- 微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决
微信企业号回调模式配置解说 Java Servlet+Struts2版本号 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.securi ...
- Java并发编程之ThreadLocal解析
本文讨论的是JDK 1.8中的ThreadLocal ThreadLocal概念 ThreadLocal多线程间并发访问变量的解决方案,为每个线程提供变量的副本,用空间换时间. ThreadLocal ...
- Java线程本地存储ThreadLocal
前言 ThreadLocal 是一种 无同步 的线程安全实现 体现了 Thread-Specific Storage 模式:即使只有一个入口,内部也会为每个线程分配特有的存储空间,线程间 没有共享资源 ...
- Java之struts2框架学习
Java之struts2框架学习 About Struts2 Struts也是一款MVC框架 , Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全 ...
- struts2中 ServletActionContext与ActionContext区别
1. ActionContext 在Struts2开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息, ...
随机推荐
- vue data不可以使用箭头函数的问题解析
这篇文章主要介绍了vue data不可以使用箭头函数问题,本文通过源码解析给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 首先需要明确,a() {}和 b: () => {} ...
- (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)
目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...
- python复合数据类型以及英文词频统计
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753. 1.列表,元组,字典,集合分别如何增删改查及遍历. 列 ...
- hadoop 综合大作业
作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 本次作业是在期中大作业的基础上利用hadoop和hive技术进行 ...
- 循环(for,while,until)与循环控制符(break,continue)
一.for循环 第一种风格 for ((;;;))(类似C语言风格) do command done 例子:for ((i=0;i<10;i++)) do echo $i done 第二种风 ...
- 工具系列 | VScode Remote 远程开发与调试(告别SSH)
简介 最近VScode发布了远程编程与调试的插件Remote Development,使用这个插件可以在很多情况下代替vim直接远程修改与调试服务器上的代码,同时具备代码高亮与补全功能,就和在本地使用 ...
- php常用命令
--------------------------------------------------------------- 重启phpservice php-fpm restart ------- ...
- PostgreSQL体系架构与内存结构
PostgreSQL体系架构 PostgreSQL的内存结构
- asp.net core 获取appsettings.json里的配置
public GoodsController(IConfiguration configuration) { Configuration = configuration; UpFileDir = Co ...
- 【java爬虫】利用webmagic框架实战demo
webmagic框架:http://webmagic.io/ WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件 PageProc ...