如已经描述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. Android - 分享内容 - 接收其他APP的内容

    就象程序可以发送数据给其他程序,所以也可以接收其他程序的数据.想一下用户如何和程序交互,以及想从其他程序接收什么样类型的数据.例如,一个社交程序可能对接收其他程序的文字(比如有趣的网址)感兴趣.Goo ...

  2. Linux 在下面MATLAB下载

    网上找了很长一段时间都没有很好的连接,或者是一个普通的软件, 在这里,给大家一个连接: ed2k://|file|[%E7%9F%A9%E9%98%B5%E5%AE%9E%E9%AA%8C%E5%AE ...

  3. VS2010或2012中,如何设置代码格式化?

    ctrl + E,D菜单在 编辑-->高级 里面 第一个菜单项

  4. 第三篇——第二部分——第三文 配置SQL Server镜像——域环境

    原文:第三篇--第二部分--第三文 配置SQL Server镜像--域环境 原文出处:http://blog.csdn.net/dba_huangzj/article/details/28904503 ...

  5. Makefile 中:= ?= += =的差别 和条件运行

    一:在Makefile中常常看到obj-m    := scull.o和KERNELDIR ?= /lib/modules/等不同的赋值方式,如今总结他们的差别: = 是最主要的赋值 := 是覆盖之前 ...

  6. HTML高级标签(2)————窗体分帧(1)————分帧演示

    我们能够简单的编写一个多帧的窗体,而且能够随意的划分窗体区域. <frameset rows="*,*,*"> <frameset cols="*,*& ...

  7. 于linux已安装moodle

    本文介绍了两个虚拟机的安装linux server 及相关服务,随着后这些基础.安装应用程序服务 moodle 2.7+  它是使用最广泛的平台,网络课程. 在安装过程中moodle之前,需要支持软件 ...

  8. 缓存之EHCache(转)

    一.简介非常简单,而且易用. ehcache 是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,而且是hibernate 默认的缓存provider.ehcache 是一个纯Java的进程内 ...

  9. IOS经典的书籍推荐

    基础 objective-c基础教程 iphone 开发秘籍 进阶篇 iOS 6编程实战 Objective-C 高级编程:iOS与OS X多线程和内存管理 Effective Objective-C ...

  10. SQL入门学习1-查询基础

    2-1 SELECT语句基础 SELECT语句作用 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). 重点 使用SELECT语句从表中选取数据. 为列设定显示用的别名 ...