SSH—Struts(三)—执行器(Action)
来源:互联网 发布:js 时间格式化函数 编辑:程序博客网 时间:2024/05/03 23:47
前面已经介绍了Struts的基本原理和控制器ActionServlet,按照一个请求的流程经过了ActionServlet之后就要到达Action类中做具体的处理了。ActionServlet通过ActionMapping获取映射的Action对象,通过Action来完成请求的处理,最后Action返回一个ActionForward对象。
解决方法:①尽量不要使用静态变量和实例变量②使用synchronized进行同步③采用ThreadLocal,将定义的成员变量放入ThreadLocal中,一般定义成private static的:
private static ThreadLocal<Integer> local = new ThreadLocal<Integer>();
用的时候,当需要获得成员变量的时候,先使用local对象的get方法Integer inte = local.get(),如果得到的是不是null,那么就返回get的值,如果是null,那么new一个成员变量,然后调用local的set方法,当前线程以后再get的时候就不再是null了。
总结:Action是Struts的实际执行者,它是单例的因此在某些情况下会有线程安全问题。这个需要注意,另外四个特俗用途的Action也需要了解,以便于不会遗漏请求在struts的管理之外。
Action的创建
当请求经过ActionServlet时,ActionServlet会根据请求中截取的地址搜索对应名字的ActionMapping,即Struts-config.xml中对应标签的配置信息。然后根据ActionMapping查找对应的Action,如果存在则直接使用,否则就创建一个并放置到HashMap充当的缓存中。也就是说Struts1中的Action是单例的。
线程安全问题
上面提到了,Action是单例的。也就是说所有的请求都使用同一个Action类。这在一定条件下就会导致线程安全问题。这里的一定条件指的是:在Action类中定义了实例变量。提一句所谓的实例变量是指在类中定义的但在所有方法之外的变量。线程安全就不细说了。解决方法:①尽量不要使用静态变量和实例变量②使用synchronized进行同步③采用ThreadLocal,将定义的成员变量放入ThreadLocal中,一般定义成private static的:
private static ThreadLocal<Integer> local = new ThreadLocal<Integer>();
用的时候,当需要获得成员变量的时候,先使用local对象的get方法Integer inte = local.get(),如果得到的是不是null,那么就返回get的值,如果是null,那么new一个成员变量,然后调用local的set方法,当前线程以后再get的时候就不再是null了。
特殊的Action
- ForwardAction
- IncludeAction
- DispatchAction
- SwitchAction
总结:Action是Struts的实际执行者,它是单例的因此在某些情况下会有线程安全问题。这个需要注意,另外四个特俗用途的Action也需要了解,以便于不会遗漏请求在struts的管理之外。
1 0
- SSH—Struts(三)—执行器(Action)
- SSH-Struts(三)—ActionForm
- Struts——三大组件(三)Action
- 自学SSH框架之---struts(三):源码分析struts1如何实现Action单例模式
- Struts 2——Action(四)
- SSH整合——Action的生成由Struts控制
- ssh三大框架——Spring,hibernate,struts面试笔试题汇总(含答案)
- ssh三大框架——Spring,hibernate,struts面试笔试题汇总(含答案)
- Spring beans——SSH (Spring+Struts+Hibernate)框架搭建之配置文件序列三
- SSH-Struts(二)—控制器(ActionServlet)
- SSH学习(三)Struts2之Action上
- SSH学习(三)Struts2之Action下
- 实现Action(三)——Action访问Servlet API
- struts学习(5)——Action中的默认值
- SSH系类(三)struts国际化(I18N)
- ssh之struts学习笔记(三)输入校验
- SSH框架学习(三、在struts基础上加入spring)
- SSH框架学习(三、在struts基础上加入spring)
- poj 1034 The dog task
- mongoDB 使用手册
- dump library cahce
- VS2008编译器下ACE的配置
- 自我介绍
- SSH—Struts(三)—执行器(Action)
- Code Vs 1169 传纸条 && 2008年NOIP全国联赛提高组
- 最懂你的人
- 关于QT5的IDE添加第三方DLL编译时显示c1083的问题
- 删除无用的图片
- java的多线程
- 拓扑排序+有向无环图(DAG)的检测
- poj 2449 k短路+A*算法
- C编程提示的总结 摘录 逐步更新