SSH—Struts(三)—跑步者(Action)
如已经描述Struts其基本原理和控制器ActionServlet,根据一个请求通过流ActionServlet之后就要到达Action类中做详细的处理了。ActionServlet通过ActionMapping获取映射的Action对象,通过Action来完毕请求的处理。最后Action返回一个ActionForward对象。
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
看名称就知道它和ActionForward是亲戚。它们俩的功能是非常相似的。都是页面跳转。假设这样一种情况:你单击了某个超链接仅仅是想要一个页面跳转到还有一个页面。
假设直接跳转的话,该请求将处于Struts的管理之外,而假设你请求到一个Action又非常浪费。这时就是使用ForwardAction的时候了。
- IncludeAction
该类提供了包括其它web组件的能力。我们知道在JSP网页中我们能够通过<include>来做这个功能。
可是Struts框架提倡的是管理全部的请求。也就是说包括其它web组件的请求也要纳入到控制中心的管理中来。那么这时候就能够使用IncludeAction了。
- DispatchAction
通常在一个Action中仅仅完毕一种业务逻辑的操作。那么假设须要非常多类似的操作就须要建立其它不同的Action类。这种结果就是Action类的过多。针对这种情况就能够通过DispatchAction类把相似的业务逻辑纳入到一个Action类中来以降低Action的数量。
- SwitchAction
这个眼下没有使用过呢,说是用于模块与模块间的切换。没实用过体会不是非常清晰。临时先放下了。
总结:Action是Struts的实际运行者。它是单例的因此在某些情况下会有线程安全问题。这个须要注意,另外四个特俗用途的Action也须要了解。以便于不会遗漏请求在struts外管理。
版权声明:本文博主原创文章,博客,未经同意不得转载。
SSH—Struts(三)—跑步者(Action)的更多相关文章
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...
- 第三章Struts2 Action中动态方法调用、通配符的使用
01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...
- Wix打包系列(三)自定义Action(Custom Action)
原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...
- J2EE进阶(三)struts2 <s:action>标签的用法
J2EE进阶(三)struts2 <s:action>标签的用法 前言 使用action标签,可以允许在jsp页面中直接调用Action,(类似AJAX页面调用)在调用Action时候,可 ...
- Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】
前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...
- mzy,struts学习(三):action中获得servlet中三域一参的三种方法
package com.mzy.servlet; import java.util.Arrays; import java.util.Map; import javax.servlet.Servlet ...
- struts 中的创建Action的三种方法
1.对于直接创建类,不实现接口和继承任何的类 例如创建一个helloAction package cn.lonecloud.control; import com.opensymphony.xwork ...
- Struts系列笔记(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- Struts 2读书笔记-----Action访问Servlet API
Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...
随机推荐
- 玩转Web之servlet(二)---servlet常见错误
1>403:tomcat发生错误 2> 404 :意思是服务器依据请求资源路径,找不到对应的资源 解决:1.依据http://localhost:8080/Web工程名/ur ...
- TabbedPaneDemo
package swing.tabbedpane; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import ja ...
- Visual Studio 2015使用EF6的ModelFirst模式添加实体数据模型缺少tt文件问题
在看实体框架 (EF) 入门的时候,当按照样例做到ModelFirst的时候出问题了 这是使用vs2015新建的实体数据模型 这是官网样例 对比样例截图,会发现里面缺少.tt的文件.最重要的是最终代码 ...
- python带cookie提交表单自动登录(转)
今天突然把博客给申请了,以前也想过的,奈于自己觉得水平还太低有点不好意思写博客,但是后来一想,自己的记录所学,加深印象,主要还是为了学习进步,不怕丢人!今天就稍微回顾一下这两天写的一段用python模 ...
- 全栈JavaScript路(八)得知 CDATASection 种类 节点
CDATASection 只船舶类型节点 基于XML 文件.演出CDATA 数据. 构造函数: CDATASection function(){[native code]} CDATASection ...
- 减少iPhone手机系统版本号
要减少移动版本号,本号,或者到"威风"站点或其他能够下载到iPhone固件的站点上下载固件,然后打开iTunes,进入到 然后按着(alt),同一时候用鼠标点击(更新button) ...
- NSIS:使用WinVer.nsh头文件判断操作系统版本
原文 NSIS:使用WinVer.nsh头文件判断操作系统版本 AtLeastWin<version> 检测是否高于指定版本 IsWin<version> 检测指定版本(唯一限 ...
- NSIS:实现程序窗口逐渐透明的渐入渐出效果
原文NSIS:实现程序窗口逐渐透明的渐入渐出效果 需要修改版的插件(支持timer功能): MUI:InstallOptions.dll MUI2:nsDialogs.dll 以及system插件,( ...
- 批处理添加iis wpg、users对IIS的访问权限
原文 批处理添加iis wpg.users对IIS的访问权限 上一篇,我们学习了如何使用批处理删除各种帐户在IIS中的访问权限.下面,我们来看看,如何通过批处理添加iis_wpg.users对IIS的 ...
- 关于在 xmlSPY 出现的错误 DOCTYPE-EXternalID的名称必须既是SYSTEM 又是PUBLIC?(转)
最近我在做学习xml时,遇见一个问题,我本用的是2009 xml spy后来老是出现问题 ,就是不能通过,后来我上网查了一下,发现是以一问题,不管是在2006中还是在2009中,都会出现这样的问题,要 ...