计应134(实验班) 李佳鸿

Action类—Struts组件
在RequestProcessor类预处理请求时,在创建了Action的实例后,就调用自身的processActionPerform()方法,该方法再调用Action类的execute()。
Action的execute()方法调用模型的业务方法,完成用户请求,然后根据执行结果把请求转发给其他合适的WEB组件。
创建支持多线程的Action
1.什么是线程安全的代码 在多线程环境下能正确执行的代码就是线程安全的。 安全的意思是能正确执行,否则后果是程序执行错误,可能出现各种异常情况。
2.如何编写线程安全的代码 很多相关的书籍里都详细的讲解如何同步线程对共享资源的使用以及synchronized关键字的各种用法,锁的概念等。 Java1.5中也提供读写锁这类的工具类。这些都需要较高的技巧,而且相对难于调试。 但是,线程同步是不得以的方法,是比较复杂的,而且会带来性能的损失。等效的代码中,如不需要同步在编写的容易度和性能上会更好些。 我接下来强调的是什么代码是线程安全的、是不需要同步的。
如下:
1)常量始终是线程安全的,因为只存在读操作。
2)对构造器的访问(new 操作)是线程安全的,因为每次都新建一个实例,不会访问共享的资源。
3)最重要的是:局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量。
Servlet是在多线程环境下的。即可能有多个请求发给一个servlet实例,每个请求是一个线程。 struts1下的action也类似,同样在多线程环境下,你也必须编写线程安全的Action类(不过这一问题在struts下已经解决)。 保证线程安全的原则就是仅仅使用局部变量,谨慎使用实例变量(拥有状态的实例,尤其是拥有业务对象状态的实例). 如果要用到那些有状态的实例,唯一和最好的办法是在Action类中,仅仅在Action类的execute()方法中使用局部变量,对于每个调用execute()方法的线程,JVM会在每个线程的堆栈中创建局部变量,因此每个线程拥有独立的局部变量,不会被其他线程共享.当线程执行完execute()方法后,它的局部变量就会被销毁. 如果Action类的实例变量是必须的话,需要采用JAVA同步机制(synchronized)对访问共享资源的代码块进行同步。
三、Struts1的几种Action Struts提供了一些现成的Action类,直接使用可以大大节省时间,如下 ForwardAction 可以转发到其他web组件,仅仅提供一个转发功能,不作处理。 IncludeAction 包含其他web组件。 DiapatchAction 通常一个Action只完成一个操作,用这个Action可以完成一组相关的操作。 LookupDispatchAction 他是DiapatchAction的子类,也可以定义多个方法,但主要用于一个表单里有多个按钮,而这些按钮又有一个共同的名字的场合。 SwitchAction 用于子模块之间的切换。
四.ActionForward类 Action类的execute()方法返回一个ActionForward对象,它代表了web资源的逻辑抽象,这里的web资源可以是jsp页面、 Java servlet、或Action。 从execute返回ActionForward可以有两种方法。
1) 动态创建一个ActionForward实例 return new ActionForward(”Failure”,”login.jsp”,true);
2) 调用ActionMapping实例的findForward方法 这个方法先从action级别找,然后在<global-forwards />级别找 return mapping.findForward(“Failure”);
 
Struts2请求处理示意图:

一.Action的创建

Struts2中的Action类用来接收用户请求,然后调用模型组件去处理业务逻辑,最后返回一个字符串,Struts2框架会根据字符串的值调用相应的页面进行显示。

Action类中包含一个execute方法,在业务控制器处理完用户请求后,根据不同的处理结果返回不同的字符串。

在Struts2中,Action以多种方式存在,例如Java类充当Action、继承ActionSupport实现Action接口和Action。

Struts2配置Action如下图:

处理请求的类的代码如下图:

二.Action的多方法调用

其中,name属性是必需的,其他属性是可选的。在为Action取名时,名字一般符合命名规则,不要使用点号和斜杠。

method属性是可选属性,如果没有配置method属性,所有请求都将要转发到Action的execute方法处理。

Action中的一个方法代表一个业务逻辑,那么模块中的多个业务逻辑如何用Action来处理呢?

(1)一个Action对应一个业务逻辑,实现方便,但是Action数量多,这种方法不推荐。如下图:

(2)一个Action对应多个业务逻辑,每个业务逻辑对应一个方法,方法的原型要和execute()的方法一样,在视图中调用相应的Action方法为“Action名称!方法名称.action”。action多方法调用如下图:

三、Result类型

Struts2的Action处理用户请求后返回一个字符串,必须在Struts.xml配置文件中进行字符串与实际视图的映射,才能完成实际的控制器功能。在配置文件中是通过action的子元素result来完成此功能的,其格式如下(第一条是跳转向action,第二条是跳向jsp网页):

其中的type属性有多种选择。

Action的创建和配置的更多相关文章

  1. Android零基础入门第73节:Activity初入门,创建和配置如此简单

    Activity是Android应用的重要组成单元之一,也是Android应用最常见的组件之一.前面看到的示例通常都只包含一个Activity或一个AppCompatActivity,但在实际应用中这 ...

  2. Servlet过滤器,Servlet过滤器创建和配置

    第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法.        第一方法是过滤器中的init()方法用 ...

  3. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

  4. Acitivity创建与配置

    •Activity的创建和配置 –Activity提供了和用户交互的可视化界面.创建一个Activity一般是继承Activity(当然也可以继承ListActivity.MapActivity等), ...

  5. 什么是Servlet,Servlet的作用,生命周期,如何创建、配置Servlet

    什么是Servlet,作用是? servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.servlet由se ...

  6. ios中pch文件的创建与配置

     PCH文件(Precompile Prefix Header File),也就是预编译头文件,其作用就是,方便你一次性导入在多个文件中同时用到的头文件.宏或者URL地址等(全局使用),可以有效的帮你 ...

  7. IDEA如何创建及配置Web项目(多图)

    正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...

  8. Spring Boot 多模块项目创建与配置 (一) (转)

    Spring Boot 多模块项目创建与配置 (一) 最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都 ...

  9. Spring Boot 多模块项目创建与配置 (一)

    最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都使用spring boot框架.之前有零零散散学过一些 ...

随机推荐

  1. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )

    前言 本文讲解如何在VS 2010开发平台中搭建CUDA开发环境. 当前配置: 系统:WIN7 64位 开发平台:VS 2010 显卡:英伟达G卡 CUDA版本:6.0 若配置不同,请谨慎参考本文. ...

  2. 新手Axis2 发布Web Service之路

    由于公司的需求,需要写几个银行接口写模拟器(Mock Server),此次接口需要发布成一个WEB Service. 一开始,我以为只要负责写接口的业务层就行了,具体的框架或是环境搭建可以不用管.在与 ...

  3. Unity随手记

    过年11天假期,带娃带了7天,吃吃喝喝.也看了点书,<射雕英雄传>(书)看了一半,还有就是在看<unity官方案例精讲>这本. 随手记一些自觉有价值或者有意思的点. 1. 对脚 ...

  4. 消费创富会开发模式系统App

    消费创富会系统定制开发,消费创富会网页开发模式,消费创富会开发软件,消费创富会系统APP开发,消费创富会平台模式开发,专业开发微信商城分销.公排.全返.分红.互助等模式定制开发,APP.网页版.微信端 ...

  5. HTML5 & CSS3 初学者指南(4) – Canvas使用

    介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件.在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力.HTML5的到来,带来了新 ...

  6. HDU 2080 夹角有多大II

    夹角有多大II Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. 数据结构(Java描述)之二叉树

    基础概念 二叉树(binary tree)是一棵树,其中每个结点都不能有多于两个儿子. 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它 ...

  8. Entity Framework Code First约定

    Code First使你能够通过C# 或者 Visual Basic .NET来描述模型,模型的基本规则通过使用约定来进行检查,而约定就是一系列内置的规则. 在Code First中基于类的定义通过一 ...

  9. GET和POST的区别,何时使用POST?

     GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符     POST:一般用于修改服务器上的资源,对所发送的信息没有限制.     GET方式需要使用Re ...

  10. 细谈sass和less中的变量及其作用域

    博客原文地址:Claiyre的个人博客 https://claiyre.github.io/ 博客园地址:http://www.cnblogs.com/nuannuan7362/ 如需转载,请在文章开 ...