传智播客——DispatchAction&MappingDispatchAction的应用

张老师的视频虽然讲了三天,我感觉用一个星期差不多可以消化!DispatchAction  &MappingDispatchAction的应用

注意:
使用DispatchAction时不能覆盖execute方法。
问题:
如果覆盖DispatchAction的execute方法,将有什么效果?
对一个实体对象的所有业务操作,浏览器通常可能发出多少种请求?
DispatchAction也是一种防止struts-config.xml文件膨胀的方式

我把处理n 个请求的方法都放在了同一action中,当我访问这个action时,访问的是其中的哪个方法呢?必须用一个参数来指定,参数值就是方法名,参数的名称是什么呢?由struts-config.xml文件中的action的parameter属性指定。
一个请求来了,它首先调用这个DispatchAction的哪个方法?都忘了吗?Execute,而我这个类里写了execute方法吗?没有则继承父类,哪父类的execute方法内部是怎么干的呢?

这个正好用myeclipse的struts功能来演示。
第2个问题:增删改查和列表,而增和改还要提前显示出界面,所以,通常一共有7种请求。增加和修改通常涉及到表单,这就会有表单校验,而其他操作不涉及表单,不能有表单校验(如果有了,那校验肯定通不过)。所以,一个实体通常联系两个DispatchAction,一个负责不与表单校验绑定的5种操作,一个负责要与 表单校验相绑定的2种操作。由于每个实体都有这些操作,可以采用模板方法设计模式来设计一个 BaseDispatchAction(这就约定每个实体的各个操作对应的方法名必须一样,跳转到的jsp逻辑命也必须一样 ),这样可以有效地减少代码量 。

四个行为对应同一个Action类的四个方法:粗粒度
四个行为对应四个Action类的某个固定名称的方法:细粒度
粗粒度和细粒度的比较:就象家中的钱分开存储与集中存储的区别

阶段与面试有关的目标


Struts中有哪些Action,请列出5个。
ForwardAction与forward属性
IncludeAction与input属性


讲解了ForwardAction的应用, <action>元素的forward属性替代ForwardAction的功能。
    <action parameter="/WEB-INF/jsp/logon.jsp" path="/index" type="org.apache.struts.actions.ForwardAction"/>
    <!-- action forward="/WEB-INF/jsp/logon.jsp" path="/index" /-->
   通过上面的分析,请学员们回答为什么type属性与forward属性不能同时出现?
在什么时候使用ForwardAction呢?在struts中也可以配置一个ForwardAction,让它只执行Form Bean的validate方法后就跳转到下一个页面,这应用于分多阶段提交表单的情况,在前面的表单提交中,根本就没有业务逻辑要处理,只是用于收集部分表单信息.

IncludeAction主要用于一个jsp页面引用一个.do资源的情况,如果不用includeAction,而用forwardAction的话,引入页面将被跳转到被引入页面。


Struts中的异常处理

交给Web容器处理异常
以配置方式处理异常
全局异常
局部异常
以模板方法设计模式编程处理异常
4.4.1 Action Class Design Guidelines (from struts documentation)
  Don't throw it, catch it! - Ever used a commercial website only to have a stack trace or exception thrown in your face after you've already typed in your credit card number and clicked the purchase button? Let's just say it doesn't inspire confidence. Now is your chance to deal with these application errors - in the Action class. If your application specific code throws expections you should catch these exceptions in your Action class, log them in your application's log (servlet.log("Error message", exception)) and return the appropriate ActionForward.


3.Struts的Plug-in

作用:将自己的一些程序代码插入进ActionServlet的声明周期中,即在ActionServlet启动和停止的过程中加入自己的代码,但不需要编写ActionServlet的子类,相比ContextListener的好处在于可以获得Struts内部的一些特定信息。
案例:编写一个用于注册日期类型转换器的PlugIn,步骤:
编写实现PlugIn接口的类,其中包含一个名为Converter的属性。
在struts-config.xml文件中配置<plug-in>和<set-property>元素

4.MyEclipse工具提供的struts支持

步骤:
创建一个新Web工程
使用MyEclipse增加struts功能
单独创建ActionForm、Action,注意要设置use case的名字
一次性创建ActionForm、Action和用作input的jsp页面
借机提示一下DynaActionForm的而应用


在使用myeclipse开发struts,注意选择1.2,选择1.1时,会出一些难以理解的问题。例如,<html:errors>标签显示如下代码的错误时就有问题ActionErrors.add(“username”,new ActionMessage());因为1.1的<html:errors>标签期望使用ActionError,而1.2已经将它作废。在struts1.2中,建议用ActionMessages.add替代ActionErrors,只是保存时用saveErrors。

我用myeclipse6做的项目,发给同学们,他们的环境是myeclipse5.5,所以打开工程时就出现了很多问题,解决办法就是看problems窗口,看错误的原因,然后去出掉myeclipse6.0引入的库,加上在myeclipse5.5中对应的库。对于struts,在myeclipse6中是以库的形式提供的,而在myeclipse5.5中则不是以库的形式提供的,同学们的解决方法就是新建一个struts的空项目,然后把新建项目中的jar拷贝过来。
创建Action时要为usecase填写内容,创建的Action类才会自动填上包名!



你可能感兴趣的:(设计模式,jsp,struts,MyEclipse,面试)