1 / 32

Struts 概述

Struts 概述. Struts 实质上就是在 JSP Model2 的基础上实现的一个 MVC 框架。 模型: JavaBean 、 EJB 组件 控制器: ActionServlet 视图: JSP 、 Struts 客户化标签. Struts 概述. ActionForm Bean. ActionForm Bean 也是一种 JavaBean ,除了具有一些 JavaBean 的常规方法,还包含一些特殊的方法,用于验证 HTML 表单数据以及将其属性重新设置为默认值。

leanne
Télécharger la présentation

Struts 概述

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Struts概述 • Struts 实质上就是在JSP Model2的基础上实现的一个MVC框架。 • 模型:JavaBean、EJB组件 • 控制器:ActionServlet • 视图:JSP、Struts客户化标签

  2. Struts概述

  3. ActionForm Bean • ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。 • Struts框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。 • Struts框架把View组件接受到的用户输入的表单数据保存在ActionForm Bean中,把它传递给Controller组件,Controller组件可以对ActionForm Bean中的数据进行修改 • JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。

  4. ActionForm Bean

  5. Struts框架的初始化流程 • 对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet • ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。

  6. Struts框架响应客户请求的工作流程

  7. Struts框架响应客户请求的工作流程 • (1)如果ActionMapping实例不存在,就创建一个ActionMapping对象,它包含了把请求转发给哪个Action的信息。 • (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。 • (3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。 • (4)如果ActionForm的validate()方法返回null或返回一个不包含ActionErrors对象,就表示表单验证成功。 • (5)ActionServlet根据配置信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute方法。 • (6)Action的execute方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。 • (7)ActionForward对象指向的JSP组件生成动态网页,返回给客户。 • 对于以上流程的步骤(4),如果ActionForm的validate()方法返回一个包含一个或多个ActionError的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件。在这种情况下,不会再创建Action对象并调用Action的execute方法。

  8. Helloapp应用 • helloapp应用包括如下需求: • 接受用户输入的姓名<name>,然后返回字符串“Hello <name> !” • 如果用户没有输入姓名就提交表单,将返回出错信息,提示用户首先输入姓名。 • 如果用户输入姓名为“Monster”,将返回出错信息,拒绝向“Monster”打招呼。

  9. Helloapp应用的组成 视图:hello.jsp HelloForm Bean 控制器:ActionServlet、HelloAction struts-config.xml 模型:PersonBean

  10. Struts-config.xml <struts-config> <form-beans> <form-bean name="HelloForm" type="hello.HelloForm"/> </form-beans> <action-mappings> <action path = "/HelloWorld" type = "hello.HelloAction" name = "HelloForm" scope = "request" validate = "true" input = "/hello.jsp" > <forward name="SayHello" path="/hello.jsp" /> </action> </action-mappings> <message-resources parameter="hello.application"/> </struts-config>

  11. struts框架的组成部分 • struts-config.xml Struts配置文件 • ActionServlet 控制器 • Action Class Control与Model之间 的适配器(adapter)。包 含控制逻辑,是Control的 实现者。 • ActionForm 显示模块数据

  12. struts框架的组成部分 • ActionMapping 帮助控制器将请求映射到操作 • ActionForward 用来指示操作转移的对象 • ActionError 用来存储和回收错误 • Struts标记库

  13. struts框架的优势 • 良好的架构和设计 • 可重用,模块化,扩展性好 • Open source

  14. struts-config.xml • Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。

  15. struts-config.xml (FormBean部分) <struts-config> <!-- Form Bean Definitions --> <form-beans> <form-bean name=“testform" type="com.cjea.test.TestForm" /> </form-beans>

  16. struts-config.xml(全局转发部分) <!-- Global Forward Definitions --> <global-forwards> <forward name="failure" path="bad.jsp"/> <forward name="success" path="/good.jsp" /> </global-forwards>

  17. struts-config.xml (action部分) <action-mappings> <action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request"> <forward name="success" path="/test/good.jsp" /> </action> <action-mappings> </struts-config>

  18. ActionServlet • ActionServlet 是struts框架 MVC 实现的 controller 部分,它是这一框架的核心。 • ActionServlet 创建并使用 Action、ActionForm 和 ActionForward。

  19. ActionServlet的基本功能 • 截获用户的Http请求 • 把这个请求映射到相应的Action类。 • 创建一个ActionForm bean实例,将form请求放入formbean的实例中

  20. ActionServlet的基本功能 • 调用Action实例的perform()方法 • 将ActioForm bean,Action Mapping对象,request和response对象传给Action的perform()方法 • perform返回一个ActionForword对象,根据方法执行情况转到相应的jsp页面.

  21. Action Classes • Action 类是业务逻辑的一个包装。Action 类的用途是将 HttpServletRequest 转换为业务逻辑。 • Action是Control和Model之间的一个适配器(adapter)。

  22. ActionForm • ActionForm 维护 Web 应用程序的会话状态。 • ActionForm 是一个抽象类,必须为每个输入表单模型创建该类的子类。

  23. 假定有一个由 HTML 表单设置的 TestActionForm。 Struts 框架将执行以下操作: 检查 TestActionForm对象是否存在;如果不存在,它将创建该类的一个实例。 Struts 将使用 HttpServletRequest 中相应的域设置 TestActionForm的状态。 ActionForm的使用

  24. Struts深度历险 • Struts执行顺序 • 在AddForm和AddAction中增加调试代码 • 运行程序查看控制台输出 ActionServlet调用AddForm的setter方法 然后调用AddAction 的execute方法 最后页面将Form中的值显示出来

  25. Struts深度历险 • ActionForm和ActionMapping中有什么? • Action中execute方法的参数列表 • 设置断点,观察变量 AddAction.java • public ActionForward execute( • ActionMapping mapping, • ActionForm form, • HttpServletRequest request, HttpServletResponse response) 通过在excute方法中设置断点、观察变量,可以帮我们解决很多使用Struts中出现的问题

  26. 小结 • 结合下图,说说Struts的运行过程。

  27. 使用Struts开发“发布出租信息” • 使用Struts开发“发布房屋信息”功能 • 模型(Model)组件 • 典型的三层结构 • 面向接口编程 • 开发顺序: DAO  Biz Form Bean JSP Action Bean struts-config.xml • 调试

  28. post.jsp confirm.jsp PostAction userlist login error 使用Struts开发“发布出租信息” 1、如果未登录,转到login 2、如果isConfirmed为false,转到confirm;否则,保存数据,转到userlist 3 、如果出错,转到error • 业务流程

  29. public ActionForward execute(...){ //如果没有登录,转发到登录页面 HttpSession session = request.getSession(false); USER user = null; if (session != null) { user = (USER) session.getAttribute("user"); } if(user == null){ return mapping.findForward("login"); } //如果还没有确认,转到确认页面 String confirm = request.getParameter("confirm"); if(null==confirm || !"yes".equals(confirm)){ return mapping.findForward("confirm"); } //调用业务逻辑方法,插入数据到数据库 try{ FwxxForm fwxxForm = (FwxxForm) form; FWXX fwxx = new FWXX(); fwxx.setTitle(fwxxForm.getTitle()); ... biz.post(fwxx); request.setAttribute("msg","发布成功!"); return mapping.findForward("index"); }catch(Exception e){ request.setAttribute("msg","出错啦:" + e.getMessage()); return mapping.findForward("error"); } } 使用Struts开发“发布出租信息” PostAction.java • 实现代码

  30. 使用Struts开发“发布出租信息” <form-beans> <form-bean name="fwxxForm" type="com.aptech.jb.entity.form.FwxxForm" /> </form-beans> <action-mappings> <action name="fwxxForm" path="/post" scope="request" type="com.aptech.jb.action.PostAction"> <forward name="affirm" path="/affirm.jsp" /> <forward name="userlist" path="/list.do?myrent=y" /> <forward name="login" path="/login.jsp" /> <forward name="error" path="/error.jsp" /> </action> </action-mappings> • 配置文件 演示示例:使用Struts开发“发布出租信息”功能

  31. 总结 • 如何使用Struts开发登录功能? • Action组件的作用是什么? • ActionForm组件的作用是什么? • struts-config.xml中都配置了哪些信息? • 回忆Struts架构图,讲述Struts是如何实现MVC模式的?

More Related