Action

原创 2007年09月29日 21:54:00

Action类(org.apache.struts.action.Action)是Struts架构中控制器组件的重要组成部分,它是用户请求和业务逻辑之间沟通的媒介。每个Action类型的对象实际上都在充当客户的业务代理。它就像政府部门接待群众来访的接待室工作人员,负责倾听群众的要求,然后按照要求的不同,调用不同的业务逻辑处理方法进行处理,即转达给对应的部门进行处理。

在Struts设计架构中,人们通常在处理器Action类的excute()方法中添加下属处理逻辑:

(1)用户进行身份验证

对用户的身份验证一般分两种情形:用户登录时的验证和中间验证。

中间验证的目的是为了防止未注册的用户绕开登录页面(通过直接访问中间页面的方式)进入应用程序,或者session超时失效后用户有继续操作。这种情况一般可以通过检验session状态来实现。有关这部分控制逻辑将在后续中具体实现。

(2)调用其它的业务逻辑Bean

虽然从语法上讲,可以将所有的业务逻辑都直接封装在处理器Action类中,但这并不是推荐的做法。通常应该将商务逻辑封装到独立的业务逻辑Bean中,再通过调用Action的excute()方法进行调用。

(3)

新服务器端对象状态

这里的服务器端对象通常指那些request范围或session 范围的Bean,在Servlet中对应的则是Request或Session对象的属性,它们一般会在后续页面中被用来创建用户界面。如:

request.setAttribute("username",userform.getUsername()); 或

session.setAttribute("username",userform.getUsername()); 

(4)返回ActionForward对象,用于标识要转向到的下一个目标页面。

如何设计好的Action?

在设计处理器Action类时要注意以下几点:

(1)首先,RequestProcessor对象对于每种Action类型只创建一个实例,该实例将被用于所有匹配的请求,这就需要定义Action类考虑如何使之能够在一个多线程环境中正常运行。(也正是由于使用多线程Servlet容器可以同时接受多个客户请求,而不是传统的多进程,另外,这样有利于代码重用。)和过去定义Servlet类的doPost()/doGet()方法类似,为实现这种线程安全,一个重要的原则是在Action类中尽量只使用局部变量而不是实例变量。局部变量的作用域被限定在所在的方法,其生存期只限于所在方法的一次运行期间,不存在被多个请求处理线程共享的问题。

(2)虽然org.apache.struts.action.Action类的excute()方法原型中允许抛出Exception,但应尽量在Action类中加入处理逻辑,在方法内部捕获和处理可能抛出的违例,而不是简单将之抛出。

(3)应该在控制其将请求重定向到其它页面前,释放action组件所占用的资源(如数据库联接),包括在调用其它业务逻辑Bean的功能方法出错、抛出违例时。

(4)要避免出现非常大的Action类,虽然表面看来将商业逻辑功能也嵌入到Action类本身实现起来最简单,但这会导致使Action类的可读性和可维护性变差。由于这些商业逻辑代码被嵌入于只能运行在Web应用程序环境的组件中,因此很难有重用的可能。

综上所述,Action通常负责将客户端请求映射到处理这些请求的业务逻辑Bean,再转向生成响应回送给客户端的页面,实际上起到的是 Controller和Model之间的“适配器”的作用,属于一种低层面的控制器。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

mybatis实战教程(mybatis in action),mybatis入门到精通

转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) ...

hdu 3339:In Action

T组数据。有足够坦克在0点,现有P个据点,Q条双向路,每条路有长度,坦克开单位长度的路需要油1升,每个据点提供一定电力。现需要占领一半以上的电力,坦克停留在一个据点即占领该据点并获得相应的电力。问最少...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

url传值到Action乱码的解决方法

jsp页面 URL传中文参数到Action里面出现乱码,用过滤器和控制器都解决不了,用了我两个多小时解决这个小问题! 解决方法有以下几种: 第一种:在Action中用 Java...

使用jquery Ajax请求action 得到返回的数据

首先搞明白观念:你action返回的值 ajax是得不到的。ajax能得到的是你action里往前台输出的内容,也就是action往输出流里输出的内容,而不是返回值。如果lz想要得到action返回给...

Struts2的使用注解配置Action(零配置)

1,首先引入struts2注解的jar包:struts2-convention-plugin.jar [java] view plain copy     ...

mybatis实战教程(mybatis in action),mybatis入门到精通

写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没...

安卓开发 中文教程(14):新手福音——动作栏(Action Bar)

动作栏(Action Bar)         在安卓3.0以后,动作栏(Action Bar)这个组件使安卓系统的布局变得非常轻松。它一般位于屏幕的顶部,提供了以下几点主...

理解Struts2的Action中的setter方法是怎么工作的

接触过webwork和Struts2的同行都应该知道, 提交表单的时候,只要Action中的属性有setter 方法,这些表单数据就可以正确赋值到Action中属性里; 另外对于Spring配...

Struts2采用注解形式配置action

采用注解的优点: 使得代码看起来简单方便,并且让一个映射变得更加的独立。传统的方式是配置struts.xml配置访问与Action的映射关系,如果映射比较多的时候就会显得比较杂乱,而且还有其它的异常...

第29天(就业班) Action开发、通配符、路径匹配、常量、数据处理、日期类型转换、文件上传下载

1. Action开发、通配符、路径匹配 1)  Struts2配置 a)  Struts2的Action的几种开发方式 方式一:继承ActionSupport package com.xp.a_co...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)