`

02-Struts1.3 Action ActionForward ActionMapping

阅读更多

 

一、Action

 

通常,在使用Struts1框架时,对于JSP组件请求应用程序执行的每个动作,应用程序都扩展Struts1org.apache.struts.action.Action以创建Action;

         Action类定义了根据Servlet环境不同可以被分别执行的两个方法,一般开发中使用:

public ActionForward execute(ActionMapping mapping, ActionForm form,	HttpServletRequest request, HttpServletResponse response) throws Exception

另一个方法是没有http的。

 

         Action类通过他的execute()方法来处理请求,返回一个ActionForward对象来指定合适的响应,一个典型的Action类会在execute方法中实现如下的逻辑处理:

               1、检验用户会话的当前状态;

               2、如果验证没有完成,按需要验证form bean的属性;

               3、根据请求来作出相应的处理;

               4、更新将会被用户生成下一个用户界面的对象;

               5、返回一个合适的AcitonForward对象,它将会指定用于生成响应的显示页面;

 

如果需要保存一个记录到数据库中,典型的过程为:

         ActionForward提供一个链接的输入页面

         ActionForm捕获输入

         ActionMapping配置Aciton

         Action将输入送到数据库中(通常会将这一步操作委托给业务逻辑去实现)

 

Aciton的主要职责:

         校验输入数据

         调用业务逻辑方法

         检测处理异常

         根据逻辑进行转向操作

 

Struts中常见的Action有:

         DispathAction:能同时完成多个Action功能的Action;

         ForwardAction:用来整合Struts和其他业务逻辑组件,通常只对请求做有效性检查;

         IncludeAction:用于引入其他的资源和页面;

         SwitchAction:用于从一个模块转换至另一个模块,如果应用分成多个模块时,就可以使用SwitchAction完成模块之间的切换;

 

说明:

         DispathAction是仅次于Action,使用最频繁的Action,他可以避免每个Action创建一个类,可支持多个逻辑处理

         当使用DispathAction要求表单提交时,会额外多传递一个参数,该参数用于区分到底调用Action的哪个方法,即在struts-config.xml

<action path="/teacher" name="TeacherForm" type="org.lxh.action.TeacherAction"
			parameter="operate" input="/index.jsp">

 

添加parameter属性,该属性用于指定参数名,即struts将根据该参数的值调用对应的方法

<html:link href="student.do?operate=entryAdd">添加</html:link>

 

注意:

         DispatchAction的配置中,parameter属性值不能够是executeperform,如果是,则会将DispatchAction中的覆盖掉,造成派发失效

         如果需要从一个页面或资源转换到另一个资源时,直接使用页面或资源路径的超级链接定位并不是好的做法,这使得控制器没有机会处理相关的请求事宜;

         使用ForwardAction可以完成请求的转发,当控制器调用ForwardActionperform()方法时,它会使用属性parameter所设定的路径进行forward的动作。

 

二、ActionForward

ActionForward用于封装转发路径,在Action中处理完用户请求之后,将会返回一个ActionForward对象,常用方式如下;

         return mapping.findForward("success");

调用ActionMapping对象的findForward方法,会从Struts配置文件中,找到一个名为successActionForward,然后返回给ActionServlet进行转向

 

ActionForward分为两类:

         全局ActionForward,可以被所有的Action访问,例如在某些页面需要用户必须登录之后才能访问,而不能直接输入页面地址来进行访问,这就需要在Action中进行判断,如果没有登陆,则将控制返回给登陆页面,这种情况下,使用全局的ActionForward

         局部ActionForward,在Action里配置,仅对该Action有效

 

ActionForward的三个属性:

         name,该Forward的逻辑名

         path,该Forward映射到的jsp资源

         redirect,只能是truefalse,设置是否使用重定向

         true:使用重定向,两次请求的参数将会分别封装在两个不同的request中,即在第二次的处理中,不能访问的第一次请求的参数;

         false:不使用重定向,两次请求的参数将会封装在同一个request中,即在第二次的处理中,可以得到第一次请求的参数;

 

可以在Action中使用如下方式获得已经配置好的ActionForwardActionForward forward = mapping.findForward("success")),服务器启动时,会将struts的配置文件读出,在内存中以hashMap的方式保存起来,Hashmap中的key就是配置的相关信息,value就是相应的对象,所以上面获得的ActionForward是已经在内存中生成的对象,是不能够动态修改的,即(forward.setRedirect(true);)会报配置已经被冻,struts-config.xml文件是不允许动态修改的;

 

ActionForward对象可以手动生成,如下:

         ActionForward forward = new ActionForward();

         forward.setPath("success.jsp");//设置ActionForward的转向页面

         return forward;

这样就可以动态修改,设置路径,重定向等属性值;

 

三、ActionMapping

 

为了操作成功,负责控制的ActionServlet需要知道每个请求的url应该如何映射到一个合适的Action类,这些信息就被封装在一个名为ActionMapping的类中

AcitonMapping对象对应了配置信息,在配置文件中一个Action标签就会对应一个ActionMapping实例,会将Action标签中的属性都放在ActionMapping中,它的一些重要属性如下;

         type:用于指定Action的实现类,也就是负责处理用户请求的业务控制器

         name:在配置文件中定义的,该ActionMapping将会用到的ActionForm的名字

         pathActionServlet根据该属性来转发用户的请求

<action path="/login" name="loginForm" type="org.lxh.action.OperTeacherAction" >
		<forward name="success" path="/success.jsp"></forward>
	</action>

 

当客户端请求login.do时,会将控制转发到LoginAction中,并且将请求参数封装在LoginForm中。

 

ActionMapping重要属性:

         unknown:设置true,则如果某个请求不能够被其他action处理,则由该action进行处理,对于一个应用,只有一个action可以被设置为true

         forward:代表满足该请求的资源,而不会实例化Action

<action path="/unknown" unknown="true" forward="/unknown.jsp" />

ActionServlet找不到响应的action来处理客户端的.do请求时,上面的action将会接管,因为它的unknown属性设置了true,将会自动跳转到unknown.jsp页面

 

         Scope:表示Struts框架在将ActionForm对象(与目标Action匹配的ActionForm)传送到Action之前,会将ActionForm对象保存的位置,可以取值为:

         request:将指示Struts调用request.setAttribute("ActionForm",ActionForm对象)方法,将ActionForm保存到request

         session:调用request.getSession().setAttribute()方法

在实际开发中,为了减少服务器端的压力,一般将scope值设置为request

 

 

 

分享到:
评论

相关推荐

    ActionForward and ActionMapping

    ActionForward and ActionMapping

    org.apache.struts缺少所需包

    import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction等缺少

    Struts in Action[文字版][中文]

    6.连线ActionForward 7.设计ActionMapping 8.和女主角Action对象共舞 9.扩展ActionServlet 10。显示动态内容 11.用Tiles开发应用 12.用户输入校验 13.本地化 14.在Struts中使用数据服务 15.Artinus:全力以赴实际...

    【项目实战案例】java校园订餐系统项目(web端)

    【项目实战案例】java校园订餐系统项目(web端) /* * Generated by MyEclipse Struts ...import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.bean.HzpBean;

    Struts框架及标记库

    1.3.6 ActionForward类 12 1.3.7 错误处理 12 2 Struts标记库 14 2.1 Struts标记库 14 2.1.1 Bean标记 14 2.1.1.1 Bean复制标记 14 2.1.1.2 定义脚本变量的标记 15 2.1.1.3 显示Bean属性 16 2.1.1.4 消息标记和国际...

    structs程序设计从入门到精通word文档

    9.4 StrutsAction单态陷阱,请谨慎使用全局变量 13 9.5 Struts异常处理 13 第10章 struts中使用国际化(i18n) 13 10.1 struts国际化程序尝试 13 10.1 Java对i18n的支持 14 10.1 struts框架中对国际化的支持 14 第11...

    Myeclipse开发struts+hibernate+spring新手入门--环境配置---项目开发示例

    4 import org.apache.struts.action.ActionMapping; 5 6 /** 7 * MyEclipse Struts 8 * Creation date: 11-10-2005 9 * 10 * XDoclet definition: 11 * @struts.form name="LoginForm" 12 */ 13 public ...

    Struts中文手册[文字版][中文]

    1.8. ActionForward 类.10 1.9. 错误处理.11 1.9.1. ActionError类11 1.9.2. ActionError类11 2. Struts 标记库13 2.1. Bean 标记.13 2.1.1. Bean 复制标记13 2.1.2. 定义脚本变量的标记.14 2.1.3. 显示 Bean 属性....

    Struts framework

    在Struts framework中, Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。...

    struts1流程和原理

    struts1的几个核心组件是值得我们注意的: 1 、ActionServlet(核心控制器)。 2、RequestProcessor类(处理... 5、ActionForward(页面跳转,跳转到jsp组件)。  6、ActionMapping(配置每个Action所对应的映射关系)。

    Struts in Action中文版

    2.6.2. Struts的强项........................................................................................................58 Struts in Action 中文版 Lastest Revised:10/14/2005 10:27:00 AM ...

    POI导入导出EXCEL文件.(struts 1.x and struts2.x).doc

    public ActionForward getDownload(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception { Form fm = (Form) actionForm; // ...

    Struts原理、开发及项目实施

    &lt;br/&gt;public final class RegUserAction extends Action { &lt;br/&gt; public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse ...

    struts中文学习资料.doc

    3.6 ActionForward类……………………………………………………………………11 3.7 错误处理………………………………………………………………………………11 Struts标记库 4. struts标记库…………………………...

    struts in Action

    1.1.1. 谁创建了Struts?...................................................................................................19 1.1.2. 为什么Struts 要开源?....................................................

    外文翻译 stus MVC

    ActionServlet (Command) creates and uses Action, an ActionForm, and ActionForward. As mentioned earlier, the struts-config.xml file configures the Command. During the creation of the Web project, ...

    Struts_config.xml详解

    parameter="" //指定Actgion的配置参数,在Action类的execute()方法中,可以调用ActionMapping对象的getParameter()方法来读取该配置参数。(相当于初始化赋值) &gt;&gt;&gt; prefix=""// 指定填充当前 Action 关联 FormBean...

    Java Oracle分页处理

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //若提交页面有提交信息,则用listForm获取进行数据库查询 //...

    ssh(structs,spring,hibernate)框架中的上传下载

    Struts+Spring+Hibernate实现上传下载    本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0  本文...

    J2EE电子商务系统开发从入门到精通

    2.4.2 ActionForward类..... 32 2.4.3 ActionMapping类..... 34 2.5 Struts模型组件类..... 35 2.6 Struts的配置文件..... 38 2.6.1 web.xml文件..... 38 2.6.2 Struts-config.xml文件..... 39 2.7 Struts标签库.......

Global site tag (gtag.js) - Google Analytics