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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值