接着昨天的来 :)
主要针对了解struts的mvc结构,model-view-control各个部分的一般组成情况,了解struts的control流程(Struts Control Flow)。主要是对control-actionServlet的学习。参考http://struts.apache.org/userGuide/introduction.html
一、view(视图)
由The View: JSP Pages and Presentation Components(html等)组成,其中包括jstl以及自定义标签,不再累述。
二、model(模型)
System State and Business Logic JavaBeans,内部信息处理(如session等)和外部事务模型(如企业逻辑等),即系统state以及通过外部business javabeans来改变其state的action,这个模型机制的原理,或者说想要达到的目的,根据我的理解应该是以web application内部的状态(state)为中心,通过action对business javabeans的调用,在进一步对内部state进行改变,更新,以实现逻辑和显示的分离,使的view已经action class与business javabeans尽可能的分离出来,从而最终达到复杂系统的分解,模块化。
三、control flow(cotroller的组成与控制流程)
这是今天主要要理解的问题。
struts中,control layer包括controller,以及developer-defined request handlers, 和 several supporting objects.
struts中,首选的controller组件是ActionServlet class,其次是AcitonMapping class。
按照我的理解,struts中controller的设计主要是为避免view层和逻辑层之间交互,减小大系统耦合度,有利于系统的扩展。因为在传统的jsp web设计model2中,显示层直接指向逻辑事务处理class(甚至两者混在一起),系统纠缠不清,从而导致设计不良,不利于扩展。
控制层获取client(通常就是浏览器)的request,根据struts的configure决定这个request交给哪个逻辑class来处理,处理完后决定交给哪一个view compontent来显示,从而起到控制流程的作用。
下面来看Struts Control Flow
控制层具体包括controller servlet,ActionMappings,ActionFormBeans等
tip1:ActionMapping,储存request导向信息,指导controller派遣正确的request到正确object(formbeans或者直接到bussiness tier)
An individual ActionMapping [org.apache.struts.action.ActionMapping] will usually contain a number of properties including:
a request path (or "URI"),
the object type (Action subclass) to act upon the request, and
other properties as needed.
tip2:AcionFormBeans,根据contoller的派遣,处理client 输入的form,然后有controller控制发送到制定的逻辑class,处理完毕后再送回ActionFormBeans,然后通过controller处理到制定的view页面。中间它的作用是验证信息的完整性和正确性,起处理流程如下:
Here is the sequence of events that occur when a request calls for an mapping that uses an ActionForm:
The controller servlet either retrieves or creates the ActionForm bean instance.
The controller servlet passes the bean to the Action object.
If the request is being used to submit an input page, the Action object can examine the data. If necessary, the data can be sent back to the input form along with a list of messages to display on the page. Otherwise the data can be passed along to the business tier.
If the request is being used to create an input page, the Action object can populate the bean with any data that the input page might need.
当然,再有些比较简单的application中,controller可能会之间把request交给事务class,从而省去以上步骤,However, in most cases, an Action object should invoke another object, usually a JavaBean, to perform the actual business logic.
对于事务层的处理流程,粗略来说
A business-logic bean will connect to and query the database,
The business-logic bean returns the result to the Action,
The Action stores the result in a form bean in the request,
The JavaServer Page displays the result in a HTML form.
由此,ActionFormBeans的作用可见一斑。
三、这部分是struts的关键,也是起思想的一个难点,我所总结和理解的,肯定有错误之处,如发现,恳请指出,谢谢!
完毕,回家:)