首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ActionServlet 的生命周期,跟线程安全性

2012-10-28 
ActionServlet 的生命周期,和线程安全性转载script/script标签:it?!-- 正文开始 -- struts的Action

ActionServlet 的生命周期,和线程安全性
转载<script></script>标签:it?

<!-- 正文开始 -->

struts的Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因.

不是线程安全的。只要不申明类变量就可以保证线程安全。因为只存在一个Action类实例,所有线程会共享类变量。

Struts:控制跳转.

Spring:管理对象,实现工厂和单态.

Hibernate:一种ORM工具.

?

1.ActionForward类

Action类的excute()方法返回一个ActionForward对象,可以是jsp页面、Java servlet、或Action。 从excute返回ActionForward可以有两种方法。

1) 动态创建一个ActionForward实例 :return new ActionForward(”Failure”,”login.jsp”,true);

2) 调用ActionMappin实例的findForward方法

这个方法先从action级别找,然后在<global-forwards />级别找

return mapping.findForward(“Failure”);

2.ActionServlet类

它继承与javax.servlet.http.HttpServlet,主要完成如下功能:

(1)接收客户端请求;

(2)将请求映射到一个相应的Action类;

(3)如果在配置文件(struts-config.xml)中指定了相应的ActionForm,从请求中获取数据填充Form Bean;

(4)调用Action类的execute()方法,传入ActionMapping的一个引用,对应的ActionForm、以及由容器传给ActionServlet的HttpServletRequest、HttpServletResponse对象。以获取数据或者执行业务逻辑选择正确的视图响应客户

3.ActionMapping类

将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的execute()方法。

1.Struts框架整体结构?

? Struts-1的核心功能是前端控制器,程序员需要关注的是后端控制器。前端控制器是是一个Servlet,在Web.xml中间配置所有Request都必须经过前端控制器,它的名字是ActionServlet,由框架来实现和管理。对它的理解就是分发器,我们也可以叫做Dispatcher。

?2.后端控制器Action?

?? Action就是我们说的后端控制器,它必须继承自一个Action父类,它们都有一个处理业务逻辑的方法execute(),传入的request,response, formBean和actionMapping四个对象,返回actionForward对象。到达Action之前先会经过一个 RequestProcessor来初始化配置文件的映射关系,这里需要大家注意几点:

1)为了确保线程安全,在一个应用的生命周期中,Struts框架只会为每个Action类创建一个Action实例,所有的客户请求共享同一个Action 实例,并且所有线程可以同时执行它的execute()方法。

在使用Action的时候,保证线程安全的重要原则是在Action类中仅仅使用局部变量,谨慎的使用实例变量。局部变量是对每个线程来说私有的,execute方法结束就被销毁,而实例变量相当于被所有线程共享。?

?

引申:局部变量指的是方法里的变量,实例变量是指全局变量。

Struts-2的处理流程:

1)?? Browser产生一个请求并提交框架来处理:根据配置决定使用哪些拦截器、action类和结果等。

2)?? 请求经过一系列拦截器:根据请求的级别不同拦截器做不同的处理。这和Struts-1的RequestProcessor类很相似。

3)?? 调用Action: 产生一个新的action实例,调用业务逻辑方法。

4)?? 调用产生结果:匹配result class并调用产生实例。

5)?? 请求再次经过一系列拦截器返回:过程也可配置减少拦截器数量

6)?? 请求返回用户:从control返回servlet,生成Html。

热点排行