Struts开发技术
本课程简介 课程内容 MVC与Struts框架简介 开发视图 扩展控制器 开发模型 配置Stuts应用
MVC与Struts框架简介 教学目标 理解MVC的概念 理解JSP Model1 理解JSP Model2 理解Struts框架的结构
MVC的概念 MVC是Model-View-Controller的简称,即模型-视图-控制器。
MVC结构图
视图 视图是用户看到并与之交互的界面,作用如下: 视图向用户显示相关的数据。 接受用户的输入。 不进行任何实际的业务处理。 视图向模型查询业务状态,但不能改变模型。 视图接受模型发出的数据更新事件,从而对用户界面进行同步更新。
模型 模型是应用程序的主体部分, 模型表示业务数据和业务逻辑。 一个模型能为多个视图提供数据。 由于应用于模型的代码只需写一次就可以被多个视图重用,所以提高了代码的可重用性。
控制器 控制器接受用户的输入并调用模型和视图去完成用户的需求。 当Web用户单击Web页面中的递交按钮来发送HTML表单时,控制器本身不输出任何东西和做任何处理。 控制器接收请求并决定调用哪个模型组件去处理请求,然后决定调用哪个视图来显示模型处理返回的数据。
MVC处理过程 首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理。 然后模型根据用户请求进行相应的业务逻辑处理,并返回数据。 最后控制器调用相应的视图格式化模型返回的数据,并通过视图呈现给用户。
MVC的优点 首先,最重要的一点是多个视图能共享一个模型。同一个模型可以被不同的视图重用,大大提高了代码的可重用性。 此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。
MVC的适用范围 使用MVC需要精心的计划,由于它的内部原理比较复杂,所以你需要花费一些时间去理解它。将MVC运用到你的应用程序,会带来额外的工作量,增加应用的复杂性,所以MVC不适合小型应用程序。 但对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使你的软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。
JavaWeb应用结构的发展 阶段1:JSP是一个独立的、自主完成所有任务的模块 阶段2:JSP Model1 阶段3:JSPModel2
JSP是一个独立的、自主完成所有任务的模块 早期的Java Web应用中,JSP文件同时负责生成网页、控制到下一个网页的流程,以及负责业务逻辑,这给Web开发带来一系列问题: HTML 和 Java 强耦合在一起,JSP 文件的编写者必须既是网页设计者,又是 Java 开发者。 可读性差。 调试困难。 不利于维护,更改业务逻辑或数据可能牵涉相关的多个网页。
JSP是一个独立的、自主完成所有任务的模块
JSP Model1
JSP Model2
JSP Model2 JSP负责生成动态网页 Servlet负责流程控制 JavaBean负责业务逻辑
Struts概述 Struts 实质上就是在JSP Model2的基础上实现的一个MVC框架。 模型:JavaBean、EJB组件 、java实用类 控制器:ActionServlet、Action 、RequestProcessor 视图:JSP(Struts客户化标签)+ActionForm
Struts概述
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表单。
ActionForm Bean
Struts框架的初始化流程 对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化控制器ActionServlet ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到ActionMappings对象中。
Struts框架响应客户请求的工作流程
Struts框架响应客户请求的工作流程 (1)如果ActionMapping实例不存在,就创建一个ActionMapping对象,它包含了把请求转发给哪个Action的信息。 (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。 (3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。 (4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的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方法。
Helloapp应用 helloapp应用包括如下需求: 接受用户输入的姓名<name>,然后返回字符串“Hello <name> !” 如果用户没有输入姓名就提交表单,将返回出错信息,提示用户首先输入姓名。 如果用户输入姓名为“Monster”,将返回出错信息,拒绝向“Monster”打招呼。
控制器:ActionServlet、HelloAction Helloapp应用的组成 视图:hello.jsp HelloForm Bean 控制器:ActionServlet、HelloAction struts-config.xml 模型:PersonBean
练习题1 问题:在Struts应用的视图中包含哪些组件? 选项: 答案:A,G (A) JSP (B) Servlet (C) ActionServlet (D) Action (E) 代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签 答案:A,G
练习题2 问题:在Struts应用的控制器中包含哪些组件? 选项: 答案:B,C,D (A) JSP (B) Servlet (C) ActionServlet (D) Action (E)代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签 答案:B,C,D
练习题3 问题:在Struts应用的模型中包含哪些组件? 选项: 答案:E,F (A) JSP (B) Servlet (C) ActionServlet (D) Action (E)代表业务逻辑或业务数据的JavaBean (F) EJB (G) 客户化标签 答案:E,F