扩展 ActionServlet
青软实训
ActionServlet
•
首先,对大部分应用来说, Struts ActionServlet 组件
可以就让其保持原样就好了。它不需要被子类化(尽
管可以子类化),缺省的类就可以在很少的困扰下完
成一般的工作任务。从架构的角度来看, Struts Actio
nServlet 是一个黑盒组件。
•
我们经常引用 Struts 控制器 servlet ,并描述了它是如
何与组成 Struts 框架的其它组件和谐共处。这在实践
中也工作得非常好,因为要在日常开发基础上使用 Str
uts ,大部分开发人员仅需要知道 ActionServlet 如何同
他们所使用的其它组件进行交互即可。只有在很少的
时候, Struts 开发人员,才直接使用 ActionServlet 。
ActionServlet
•
对于为什么 Struts 开发人员要远离 ActionServlet ,有
两个主要原因:
–
首先,它确实是一个单态( singleton )对象。在很多 Struts
应用中都只有一个 ActionServlet 。我们一般不会象创建新的
Action 或者 ActionForm 一样来创建新的 ActionServlet 。在
Struts 中,简单得实际上没给 servlet 没留下多少工作需要做
了。
–
第二, ActionServlet 会在调用其它对象之时花费大量的时间。
虽然我们不需要编写 ActionServlet ,但我们需要编写将要被
它调用的对象。许多框架都使用这种方式。事实上,这被视
为是一个正式的设计模式,控制倒置模式。由 ActionServlet
来协调应用的活动,用户编写来适应框架而定义的方法仅仅
被 ActionServlet 所调用。而它们并不在 servlet 中声明的。
ActionServlet
•
Servlet 三人帮
–
所有的可插入组件中, RequestProcessor(org.apache.struts.action.RequestProces
sor) 是最强大的。 RequestProcessor 是 ActionServlet 的实际核心;它处理顶
层的请求,而 Action 则处理某个特定的 URI 请求。
–
RequestProcessor 要处理的一个顶层的问题是异常处理。异常类是可以注册到
某个处理句柄中的。如果某个已注册的异常被抛出, RequestProcessor 就将
该异常传递到相应的 Exceptio nHandler(org.apache.struts.action.ExceptionHandle
r) 。你也可以使用缺省的异常类,或者为每个异常类型提供相应的子类。
–
许多应用都需要访问它们特定的资源。为了使 Struts 更容易初始化特定的资
源,你可以注册一个插件 Action 到控制器中。然后由控制器在启动时调用 A
ction 的 init 方法,在退出时调用 destroy 方法。 Action 能够访问调用的 serv
let ,并能够用来做一切常规 servlet 能做的所有事情。
–
这三个扩展点—— RequestProcessor, ExceptionHandler, 和 PlugIn Action——
并没有给 ActionServlet 留下太多的工作要做。事实上, ActionServlet 在运行
时要做的所有事情仅仅是为相应的应用模块选择相应的 RequestProcessor 而
已。
评论0