如已经描述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)的更多相关文章

  1. SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  2. 第三章Struts2 Action中动态方法调用、通配符的使用

    01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...

  3. Wix打包系列(三)自定义Action(Custom Action)

    原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...

  4. J2EE进阶(三)struts2 <s:action>标签的用法

    J2EE进阶(三)struts2 <s:action>标签的用法 前言 使用action标签,可以允许在jsp页面中直接调用Action,(类似AJAX页面调用)在调用Action时候,可 ...

  5. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】

    前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...

  6. mzy,struts学习(三):action中获得servlet中三域一参的三种方法

    package com.mzy.servlet; import java.util.Arrays; import java.util.Map; import javax.servlet.Servlet ...

  7. struts 中的创建Action的三种方法

    1.对于直接创建类,不实现接口和继承任何的类 例如创建一个helloAction package cn.lonecloud.control; import com.opensymphony.xwork ...

  8. Struts系列笔记(6)---action接收请求参数

    action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...

  9. Struts 2读书笔记-----Action访问Servlet API

    Action访问Servlet API Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试. 对于Web应用的控制器而言,不访问ServletAPI是几 ...

随机推荐

  1. hdu 5091 Beam Cannon(扫描线段树)

    题目链接:hdu 5091 Beam Cannon 题目大意:给定N个点,如今要有一个W∗H的矩形,问说最多能圈住多少个点. 解题思路:线段的扫描线,如果有点(x,y),那么(x,y)~(x+W,y+ ...

  2. 谷歌上不去,长期的解决方案。在稳定高速Google和Gmail

    对稳定Google神器 国内Google很不稳定,缓慢并经常上不去,由"我想去Google",安全和稳定的使用Google.Gmail.Google+所以通常需要特殊的手段岗位胜任 ...

  3. 基于高性能的硬件配置Nginx

    Nginx高级配置将涉及硬件,假设你配置不好,直接使各种性能下降. 我这里总结一下.怎样依据server的硬件设备来配置Nginx. 见下图: 低訪问量的网络,能够这样配置. 标准的网络訪问量,能够这 ...

  4. Session小案例------完成用户登录

    Session小案例------完成用户登录     在项目开发中,用户登陆功能再平常只是啦,当用户完毕username和password校验后.进入主界面,须要在主界面中显示用户的信息,此时用ses ...

  5. ext Window点击右上角的关闭(Xbutton)加入监控事件

    使用场景:关闭window的时候添加监听事件. 正确的使用方式: addwin = new Ext.Window({ title : '新增', closable : true, width : 50 ...

  6. 复制(1)——SQLServer 复制简介

    原文:复制(1)--SQLServer 复制简介 前言: SQLServer的复制技术最少从SQLServer2000时代已经出现,当初是为了分布式计算,不是为了高可用.但是到了今天,复制也成为了一种 ...

  7. j经常使用ava应用server

    什么是应用server它?它主要提供的执行环境的应用程序,为组件提供服务. 要了解更多关于,您可以查看我的博客:何为容器? Java 的应用server非常多,从功能上分为两类:WEB 应用serve ...

  8. HDU 5095 Linearization of the kernel functions in SVM(模拟)

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5095 Problem Description SVM(Support Vector Machine) ...

  9. HDU 1541 Stars (树状数组)

    Problem Description Astronomers often examine star maps where stars are represented by points on a p ...

  10. quick-cocos2d-x教程8:程序框架内lib文件夹分析

    lib文件夹是如今全部文件夹中最复杂的,包括了整个运行所需的库文件.我们简单看下,在开发初期,不须要深入到这个库里去研究 cocos2d-x 文件夹就是c++版的原始文件 framework_prec ...