Struts学习随笔(3)

对于一个框架,它至少应该具备以下三个部分:
外部配置文件
提供开发人员不想嵌入源代码中的实现细节。
中心控制器
提供一种方式,将HTTP 请求排入一个易于管理的队列。这种设计有时叫前端控制器
模式(Front Controller [Go3])
外部表现系统
让不同的人同时工作在同一应用的不同部分。如, Java 工程师可以工作在和中心控制
器相关的类,而页面设计者则专注于JSP。除了JSP,其他表现系统,如Velocity Templates或者 XSLT, 都可以和Struts 一起使用。
 
框架有时分为两极标有白盒和黑盒的统一体
白盒框架严重依赖于面向对象的语言的特征,如继承和动态绑定。黑盒框架则注重定义可插入组件的接口,然后基于这些接口提供基本的起始组件。接口和基本组件通常提供热点(hotspot)方法,这个方法可以直接使用或者重写后提供特别的行为。
 
Design Patterns 中的MVC 例子称为通知/订阅者(notify/subscribe)协议和观察者(Observer)模式的使用。
 
结合使用 JSP和 servlet 开始被称为Model 2 (单独使用JSP 称为Model 1)
 
层模式 在一个复杂应用中,这可以在添加组件时,防止依赖关系呈指数增长。在设计远程应用时,分层是一个核心模式。
 
分层的web 应用使用一种比传统MVC 模式更加“扁平”的模式。控制器被夹在表现层(View) 和应用逻辑 (Model)之间。 
每个组件的主要职责并没有改变。流程有轻微改变,即查询状态和改变通知都必须通过控制器。另一个改变是,当视图,或者表现层需要渲染动态页面时,它使用从控制器传递的数据而不是直接来自于模型层。 这种改变去除了View 和 Model 的耦合,允许控制器选择数据和显示这些数据的视图。 
 
Struts 通过提供一个控制器Servlet 实现了Sun 的 Model 2 架构,这个控制器可以用来管
理JSP 页面和其他表现设备之间的流程。Struts 通过使用ActionForward和ActionMapping
来保证表现层之外的控制流决策来实现 MVC/层 模式。JSP 可以引用一个逻辑目标。控制器组件在运行时提供准确的URI。
类                                               描述 
ActionForward                           用户指向或者视图选择 
ActionForm                                状态改变的数据 
ActionMapping                          状态改变事件 
ActionServlet                              控制器,接受用户请求和状态改变,以及发出视图选择 
Action                                         控制器的一部分,与模型交互,执行状态改变或状态查询,以及告诉ActionServlet 下一个选择的视图 

 
ApplicationResources.properties          存储本地化信息和标签,以使应用可以国际化
struts-config.xml                                     存储控制器对象的缺省配置,包括模型支持的用户指向,状态改变,状态查询
 
标记库描述符       目的
struts-html.tld        扩展HTML Form的JSP标记
struts-bean.tld        扩展处理JavaBean的JSP标记
struts-logic.tld        扩展测试属性值的JSP标记
 
IMPORTANT
 
实践中,控制器与视图的交互通过请求,会话以及Servlet 平台提供的应用上下文进行。
控制器和模型的交互通过文件和数据存储系统完成 (比如装入XML 文档或者属性文件),或者通过其他服务,如TCP, 创建一个到JDBC 数据库的连接。
 
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
 
当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求
当ActionServlet 收到一个请求, 它通过一系列的流程处理locale, mapping, form bean, 最
后是Action 来运行这个请求。这里某些步骤只在Struts 1.1 应用才有:
处理多部分请求. 如果请求是个多部分(multipart)请求 (比如,一个表单加上一个MIME
附件), Servlet 用一个特殊的句柄包装这个请求,避免处理错误。
处理路径 ActionServlet 首先检查这个请求路径是否是一个应用模块。如果是,相应模
块的配置被选中。[Struts 1.1]
处理场所.(local) 默认下,ActionServlet 会检查是否有一个标准的locale 对象在用户会
话的上下文当中。如果没有, ActionServlet将放入一个。这个对象将为每个用户提供
本地化表现。
处理内容和缓存 默认的MIME 类型和可选的请求头将加在响应之上。
处理映射( Mapping) ActionServlet检查ActionMapping,是否有注册的路径符合正处
理的请求。如果没找到,ActionServlet 转发到默认(或 “unknown”) Action(如果设定有
默认或未知Action),否则,产生一个 “bad request” 错。如果找到相关映射,将被放入
请求之中,供后面引用。
处理角色. ActionServlet 检查是否用户被授权可以访问action. [Struts 1.1]。
处理ActionForm. ActionServlet 检查是否mapping 中指定了一个ActionForm.。如果是,
servlet 检查是否已经有一个存在于特定的范围之内(默认是会话)。如果不存在,
ActionServlet 创建一个。
处理组装. ActionForm的 reset 方法被调用,然后通过反射机制被自动组装。匹配
ActionForm属性的参数将被使用。其他参数和属性被忽略。
处理验证 ActionForm的 validate 方法被调用。如果方法返回false, 控制传递给
ActionMapping的input 属性标明的路径, Action 未被处理。
处理转发和包含 如果ActionMapping 标明forward 或include 属性,控制被传递给其
他资源。否则ActionServlet 将请求委托给一个Action 对象。
处理 Action. 如果mapping 标明一个Action 类型, ActionServlet检查是否已经有一个被
实例化了。如果没发现, Action 对象将被实例化。每个类只能有一个Action 对象
(Singleton 模式),它通过多线程处理所有对它的请求。Servlet调用 Action的 perform
或 execute 方法,传递请求, 响应, mapping, 以及form bean。
Action 执行要求的行为,可以包括:
访问数据系统,比如JDBC 数据库
在请求中创建被视图使用的对象
如果需要,在会话中创建对象
根据需要更新会话对象,比如用户的场所
执行需要的业务功能
处理以外和其他错误条件
发送一个直接发送一个响应,或者返回一个ActionForward 给servlet
这里某些行为,象访问数据库,通常由Action 调用的业务对象来处理( Business Delegate
模式)。 Action 处理一些web 特定的任务,可以放在业务对象中的代码都应该放入业务对
象。Action 是一个控制器类,不应该用来处理业务的核心逻辑。
 
通常, 动态数据在JavaBean 中传递到请求上下文中的页面。这就是熟知的视图助手(View
Helper )模式
ps: struts in action 真是通俗易懂啊....
 

你可能感兴趣的:(struts,职场,休闲)