SSH
2011
(1)检索和用户请求匹配的 ActionMapping 实例,如果不存在,就返回用户请求路径无效的信息。
(2) 如果 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交的表单数据保存到
ActionForm 对象中。
(3)根据配置信息决定是否需要表单验证。如果需要验证,就调用 ActionForm 的 validate() 方法。
(4)如果 ActionForm 的 validate() 方法返回 null 或返回一个不包含 ActionMessge 的 ActionErrors 对象,
就表示表单验证成功。
(5)ActionServlet 根据 AtionMapping 实例包含的映射信息决定将请求转发给哪个 Action 。如果应的
Action 实例不存在,就先创建这个实例,然后调用 Action 的 execute()方法。
(6)Action 的 execute()方 法 返 回 一 个 ActionForward 对 象 , ActionServlet 再 把 客 户 请 求 转 发 给
ActionForward 对象指向的 JSP组件。
(7)ActionForward 对象指向的 JSP组件生成动态页面,返回给客户。
对于以上流程的步骤 (4) ,如果 ActionForm 的 validate() 方法返回一个包含一个或多个 ActionError 的
ActionErrors 对象,就表示表单验证失败,此时 ActionServlet 将直接把请求转发给包含客户提交表单的 JSP
组件。在这种情况下,不会再创建 Action 对象并调用 Action 的 execute 方法。
Struts 的工作机制,为什么要用?
工作机制:
在 web 应用启动时就会加载初始化 ActionServlet,ActionServlet 从
struts-config.xml 文件中读取配置信息 ,把它们存放到各种配置对象
当 ActionServlet 接收到一个客户请求时 ,将执行如下流程 .
(1)检索和用户请求匹配的 ActionMapping 实例 ,如果不存在 ,就返回请求路径无效信息 ;
(2)如果 ActionForm 实例不存在 ,就创建一个 ActionForm 对象 ,把客户提交的表单数据保存到 ActionForm
对象中 ;
(3)根据配置信息决定是否需要表单验证 .如果需要验证 ,就调用 ActionForm 的 validate() 方法 ;
(4)如果 ActionForm 的 validate()方法返回 null 或返回一个不包含 ActionMessage 的 ActuibErrors 对象 , 就
表示表单验证成功 ;
(5)ActionServlet 根据 ActionMapping 所包含的映射信息决定将请求转发给哪个 Action, 如果相应的
Action 实例不存在 ,就先创建这个实例 ,然后调用 Action 的 execute()方法 ;
(6)Action 的 execute() 方 法 返 回 一 个 ActionForward 对 象 ,ActionServlet 在 把 客 户 请 求 转 发 给
ActionForward 对象指向的 JSP组件 ;
(7)ActionForward 对象指向 JSP组件生成动态网页 ,返回给客户 ;
为什么要用:
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统
非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架, Struts
便应运而生。
基于 Struts 开发的应用由 3 类组件构成:控制器组件、模型组件、视图组件
说下 Struts 的设计模式
MVC 模式 :: web 应用程序启动时就会加载并初始化 ActionServler 。用户提交表单时,一个配置好的
ActionForm 对象被创建, 并被填入表单相应的数据, ActionServler 根据 Struts-config.xml 文件配置好的设置
决定是否需要表单验证,如果需要就调用 ActionForm 的 Validate()验证后选择将请求发送到哪个 Action ,
如果 Action 不存在, ActionServlet 会先创建这个对象,然后调用 Action 的 execute()方法。 Execute()
从 ActionForm 对象中获取数据,完成业务逻辑,返回一个 ActionForward 对象, ActionServlet 再把客户请
求转发给 ActionForward 对象指定的 jsp 组件,ActionForward 对象指定的 jsp 生成动态的网页, 返回给客户。
单例模式: Factory(工厂模式 ):
定义一个基类 ===》实现基类方法(子类通过不同的方法) ===》定义一个工厂类(生成子类实例) === 》