版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LOGO第第10章章 框架式编程和设计模式框架式编程和设计模式孙焘孙焘重点:重点:框架式编程框架式编程1MVC编程思想编程思想 2structs概述与举例概述与举例 3难点:难点:MVC编程思想理解编程思想理解 1structs流程流程 210.1 框架式编程v什么是模式什么是模式 v什么是框架什么是框架 v为什么要用模式为什么要用模式 v为什么要用框架为什么要用框架 v常见的设计模式常见的设计模式v常见的常见的java框架框架 10.1 框架式编程v10.1.1 什么是模式 v模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。v A
2、lexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。 模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。 10.1 框架式编程v10.1.2 什么是框架 v框架,即framework。是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。v框架,其实就是某种应用的半成品,就是一组组件
3、,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。 10.1 框架式编程v10.1.3 为什么要用模式 v因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。 10.1 框架式编程v10.1.4 为什么要用框架 v因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多
4、细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。 框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。 10.1 框架式编程v10.1.5 常见的设计模式v最常见的MVC模式。 MVC模式是1996年由Buschmann提出的: 模型(Model):就是封装数据和所有基于对这些数据的操作。 视图(View):就是封装的是对数据显示,即用户界面。 控制器(Control):就是封装外界作用于模型的操作和对数据流向的控制等。 10.1 框架式编程v10.1.6
5、常见的JAVA框架 v(1)WAF: 全称:WEB APPLICATION FRAMEWORK 主要应用方面:EJB层,(WEB层也有,但是比较弱)。 主要应用技术:EJB等 出处:http:/ 简述:这是SUN在展示J2EE平台时所用的例子PetStore(宠物商店系统)里面的框架。是SUN蓝皮书例子程序中提出的应用框架。它实现了 MVC和其他良好的设计模式。SUN的网站上有技术资料,最好下载PetStore来研究,WEBLOGIC里自带此系统,源码在beaweblogic700samplesserversrcpetstore。这是学习了解J2EE的首选框架。 免费。 10.1 框架式编程v
6、10.1.6 常见的JAVA框架v(2) Struts vStruts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。10.1 框架式编程v10.1.6 常见的JAVA框架v(3)Spring Framework vSpring是一个解决了许多在
7、J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底
8、层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。 10.1 框架式编程v10.1.6 常见的JAVA框架v(4)HibernatevHibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernat
9、e可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 10.2 MVC编程思想 10.2 MVC编程思想vMVC是什么是什么vMVC设计模式设计模式vMVC的优点的优点vMVC的缺点的缺点vMVC例子例子10.2 MVC编程思想vMVC是什么是什么vMVC是一种目前广泛流行的软件设计模式,早在是一种目前广泛流行的软件设计模式,早在70年代,年代,IBM就推出了就推出了Sanfronscisico项目计划,其实就是项目计划,其实
10、就是MVC设计模式设计模式的研究。近来,随着的研究。近来,随着J2EE的成熟,它正在成为在的成熟,它正在成为在J2EE平台上推荐平台上推荐的一种设计模型,也是广大的一种设计模型,也是广大Java开发者非常感兴趣的设计模型。开发者非常感兴趣的设计模型。MVC模式也逐渐在模式也逐渐在PHP和和ColdFusion开发者中运用,并有增长趋开发者中运用,并有增长趋势。随着网络应用的快速增加势。随着网络应用的快速增加,MVC模式对于模式对于Web应用的开发无疑应用的开发无疑是一种非常先进的设计思想,无论你选择哪种语言,无论应用多复杂是一种非常先进的设计思想,无论你选择哪种语言,无论应用多复杂,它都能为你
11、理解分析应用模型时提供最基本的分析方法,为你构造它都能为你理解分析应用模型时提供最基本的分析方法,为你构造产品提供清晰的设计框架,为你的软件工程提供规范的依据。产品提供清晰的设计框架,为你的软件工程提供规范的依据。 10.2 MVC编程思想vMVC设计模式设计模式vMVC英文即英文即Model-View-Controller,即把一,即把一个应用的输入、处理、输出流程按照个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个的方式进行分离,这样一个应用被分成三个层层模型层、视图层、控制层模型层、视图层、控制层 10.2 MVC编程思想v
12、MVC设计模式设计模式v模型模型(Model):就是业务流程:就是业务流程/状态的处理以及业务规则的制定。状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前最主要的核心。目前流行的流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型做了进
13、一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。也
14、不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。些。这点对编程的开发人员非常重要。10.2 MVC编程思想vMVC设计模式设计模式v 视图视图(View)代表用户交互界面,对于代表用户交互界面,对于Web应用应用来说,可以概括为来说,可
15、以概括为HTML界面,但有可能为界面,但有可能为XHTML、XML和和Applet。随着应用的复杂性和规模性,界面的处。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型的处理。业务流程的处理交予模型(Model)处理。比如处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以一个订单
16、的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。及将用户界面的输入数据和请求传递给控制和模型。 10.2 MVC编程思想vMVC设计模式设计模式v 控制控制(Controller)可以理解为从用户接收请求可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做
17、任何的数据处理。例如,么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后用户点击一个连接,控制层接受请求后, 并不处理业务信并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。多个视图,一个视图可能对应多个模型。 10.2 MVC编程思想10.2 MVC编程思想vMVC的优点的优点v1.低耦合性。视图层和业务层分离,这样就允许更改视图层代低耦合性。视图层和业务层分离
18、,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。器和视图相分离,所以很容易改变应用程序的数据层和业务规则。 v2.高重用性和可适用性高重用性和可适用性 v3.较低的生命周期成本较低的生命周期成本v4.快速的部署快速的部署 v5.可维护性。分熟视图层和业务逻辑层也使得可维护性。分熟视图层和业务逻辑层也使得WEB应用更易应用更易于维护
19、和修改于维护和修改 v6.有利于软件工程化管理有利于软件工程化管理 10.2 MVC编程思想vMVC的缺点的缺点vMVC的缺点是由于它没有明确的定义,所以完全理解的缺点是由于它没有明确的定义,所以完全理解MVC并不是很并不是很容易。使用容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。费一些时间去思考。 vMVC并不适合小型甚至中等规模的应用程序,花费大量时间将并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。应用到规模并不是很大的应用程序通常会得不偿失。
20、 vMVC设计模式是一个很好创建软件的途径,它所提倡的一些原则,设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。将会使你的软件在健壮性,代
21、码重用和结构方面上一个新的台阶。 10.2 MVC编程思想vMVC的例子的例子vservlet.java(MVC中的中的C) package zz; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class servlet extends HttpServlet public voiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException Htt
22、pSession session=request.getSession(); NameBean nameBean=new NameBean(); String name=request.getParameter(name); nameBean.setname(name); session.setAttribute(nameBean,nameBean); String add=/WEB-INF/classes/ShowName.jsp; RequestDispatcher dispatcher=request.getRequestDispatcher(add); dispatcher.forwa
23、rd(request,response); 10.2 MVC编程思想vMVC的例子的例子vNameBean.java(MVC中的中的M) package zz; public class NameBean private String name; public NameBean() public NameBean(String name) setname(name); public String getname() return name; public void setname(String name) =name; 10.2 MVC编程思想10.2 MVC编程思想vMVC
24、的例子的例子vShowName.jsp(MVC中的中的V) 10.3 struts概述与举例 vStruts 1 简介及存在的问题 vWebWork简介 vStruts2框架处理流程 vStruts2和Struts1的对比vStruts2框架开发应用的过程 vStruts2编写Action vStruts2配置Action vStruts2下的helloworld 10.3 struts概述与举例vStruts 1 简介及存在的问题v1.Model部分v模型主要由底层的业务逻辑组件充当,它们提供数据库访问和业务逻辑的实现。可以是javaBean、EJB组件或者WebService服务,stru
25、ts1没有为实现Model组件提供任何支持v2.View部分v采用JSP实现,Struts1提供了丰富的标签库,减少JSP脚本的使用v3. Controllerv由核心控制核心控制器-ActionServlet和用户自定义Action组合,由struts1框架提供支持v缺陷v1. 支持表现层技术单一v只支持JSP,不提供与其它表现层技术整合,如FreeMarker Velocityv2.与Servlet Api 严重耦合,难于测试vAction类包括HtttpServletRequest、HttpServletResponsev3.代码严重依赖于Struts1 Api,属于侵入式设计vAcit
26、on类必须继承Action的基类10.3 struts概述与举例vWebWork简介vstruts2是webwork的升级,webwork到struts2是一次平滑的过渡。v它来自另一个开源组织:opensymphony(交响乐)v1.Viewv它支持更多的表现层技术:velocity、freeMarker和xslt等v2.Controllerv提供核心控制器ServletDispatcherv业务逻辑Action:,无需与servlet api耦合,由Action拦截器负责数据初始化,它只是一个普通的实现了webwork Action接口的POJO(包含了一个execute方法)10.3 s
27、truts概述与举例vStruts2框架处理流程 10.3 struts概述与举例vStruts2框架处理流程 v1.用户请求v2.核心控制器FilterDispatcher根据请求决定调用的Actionv3.struts2拦截器链自动对请求应用通用功能v4.回调Action的execute方法v5.execute方法返回处理结果10.3 struts概述与举例vstruts2和struts1的对比v1、Action类vstruts1要继承一个抽象基类,属于抽象类编程而不是接口;struts2中Action实现接口是不必需的,只要一个包含execute的POJO类就要以作struts2的Act
28、ionv2、线程模式vstruts1的Action是单例模式并且必须是线程安全的,它用一个Action实例处理所有的请求;Struts2为每一个请求产生一个实例,没有线程安全的问题v3、Servlet依赖vstruts1的Action严重依赖Servlet Api,使得测试要依赖web容器v4、封装请求参数vstruts1使用ActionForm对象封装用户请求参数,虽然支持使用动态的ActionForm来简化ActionForm开发,但依然要在配置文件中定义ActionForm;struts2可以直接使用Action的属性来封装用户请求参数,也可以使用Model对象来封装请求参数,Model
29、却只是一个POJOv5、执行控制vstruts1一个模块对应一个请求,Action的资源必须是线程安全的,模块中的Action共享相同的生命周期;struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期(Action不是单例的)v6、表达式语言vstruts1整合了JSTL,可以使用JSTL表达式语言。struts2可以使用JSTL,还整合了一种更强大和灵活的语言:OGNL(object graph notation languae) 10.3 struts概述与举例vStruts2框架开发应用的过程v第一步:创建Web工程v第二步:引入Struts的类库,核心的类库有ognl.
30、jar、freemarker.jar、struts2-core.jar、webwork.jar,common-logging,这些类库最终都应该在web-inf/lib下面。v第三步:在web.xml中声明中心控制器。v v struts2v org.apache.struts2.dispatcher.FilterDispatcherv v v v struts2v /*v v通过这样的配置,所有的请求都会发送给中心控制器。v第四步:在工程中创建struts2的配置文件struts.xml。配置我们编写的每个Action,还v有请求与Action对应关系,执行结果(字符串)与响应界面的对应关系
31、。一般从其他地方拷贝,不要自己写。v第五步:编写Action,配置Action。在开发过程中主要是这一步。10.3 struts概述与举例vStruts2编写ActionvAction类可以是普通的类,可以是实现Action接口的类,可以是继承ActionSupport的类。Action接口是execute方法和几个常量,通常不使用。ActionSupport实现了Action接口,并且封装了对国际化和验证的支持,如果项目需要使用验证和国际化等功能,可以继承该类。vAction类中的方法(控制方法),方法的返回值是字符串,是逻辑名字,表示某个输出界面。方法没有参数。对应每个请求都应该有这样一个
32、方法。v为了获取输入信息,需要定义与输入元素名字相同的成员变量,并提供set方法。为了输出,需要编写成员变量来表示这些输出信息(在控制方法中对成员变量赋值),并提供get方法供框架调用。10.3 struts概述与举例vStruts2配置Actionv在struts.xml中配置。主要包括两部分:请求与具体的Action的方法的对应关系;Action中的控制方法返回的字符串与具体的响应界面的对应关系。v请求与Action方法的对应关系:vvname指出请求的名字,class指出Action类的名字,method指出方法的名字v v如果没有指定method方法,默认找Action中的execut
33、e方法v也可以在请求中指定方法的名字vlogin!login.action,“!”之前是请求的名字,“!”之后是方法的名字,这样在配置的时候就可以不指定方法的名字。v执行结果的配置:v/success.jsp10.3 struts概述与举例vStruts2下的helloworldv使用:JDK 1.5.0_17 + eclipse-jee-europa-winter-win32 + Tomcat 5.5 + struts-2.0.14-ga v下是Struts2 Hello World实例的文件内容。在eclipse中新建一个动态Web工程,命名为hello。 10.3 struts概述与举例
34、 (HelloWorld.java) package tutorial; / 导入创建一个导入创建一个Struts2 action必须扩展的一个必须扩展的一个类类 import com.opensymphony.xwork2.ActionSupport; /* * 创建一个创建一个action HelloWorld * 创建一个创建一个Struts2 action必须扩展必须扩展ActionSupport类类 */ public class HelloWorld extends ActionSupport public static final String MESSAGE = Hello World; / action被请求时执行的方法被请求时执行的方法 public String execute() throws Exception setMessage(MESSAGE); / 常量常量“SUCCESS”是在是在ActionSupport所所实现的实现的Action接口中定义的接口中定义的action的返回结果的返回结果 return SUCCESS; private S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 故宫文案营销方案策划(3篇)
- 杠杆原理营销方案(3篇)
- 模板快速架施工方案(3篇)
- 汽车知识活动策划方案(3篇)
- 海南小吃活动策划方案(3篇)
- 炮车专项安全施工方案(3篇)
- 省级文明工地施工方案(3篇)
- 穿提涵施工方案(3篇)
- 线损治理施工方案(3篇)
- 脱毛五一营销方案(3篇)
- 成人癌性疼痛护理团体标准
- 实验室生物安全应急预案
- 企业节约用水知识教育
- GB/T 44970-2024粮油机械气垫带式输送机
- 《低聚糖功能性质》课件
- 《森林植物》课件-03 榆科
- 华南理工大学《工程热力学》2023-2024学年第一学期期末试卷
- T-NBHTA 004-2024 热处理企业环境保护技术规范
- 08 西北地区(课件)-备战2025高考地理之中国地理主题探究式复习
- 2024年广西南宁市小升初数学试卷(含答案)
- 大学语文全套教学课件
评论
0/150
提交评论