《Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第7章》由会员分享,可在线阅读,更多相关《Web数据库编程——Java 教学课件 ppt 作者 舒红平 第6-9章 第7章(125页珍藏版)》请在金锄头文库上搜索。
1、第7章 基于MVC的Struts技术,7.1 MVC设计模式简介 7.2 Struts的概念及特征 7.3 Struts的工作原理和组件 7.4 Struts配置文件简介 7.5 Struts高级特性 7.6 Struts标记库 7.7 Struts示例 思考题,7.1 MVC设计模式简介,7.1.1 MVC设计模式 MVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC把应用程序分成三个核心模块:模型、视图和控制器,它们分别担负不同的任务。图7.1显示了这三个模块各自的功能以及它们的相互关系。,图7.1 MVC设计模式,1视图 视图是用户看到并与之交互的界面。视图向用户显示
2、相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。 2模型 模型是应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,因此提高了应用的可重用性。,3控制器 控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接受请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。 4MVC处理过程 首先,控制器接受用户的请求,并决定应
3、该调用哪个模型来进行处理,然后,模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后,控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。,5MVC的优点 在最初的JSP网页中,像数据库查询语句这样的数据层代码和HTML这样的表示层代码混在一起。经验丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,需要精心地计划和不断地尝试。MVC从根本上强制性地将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是毋庸质疑的。,首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多个用户界面,例如,用户希望既能通过浏览器来收发电子邮件,又能通
4、过手机来访问电子邮箱,这就要求Web网站同时提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。,其次,模型是自包含的,与控制器和视图保持相对独立,所以可以方便地改变应用程序的数据层和业务规则。如果把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,则只需改变模型即可。一旦正确地使用模型,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于MVC的三个模块相互独立,改变其中一个不会影响到其他
5、两个,因此依据这种设计思想能构造良好的松耦合的构件。 此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的视图将处理结果显示给用户。,6MVC的适用范围 使用MVC需要精心地计划,由于它的内部原理比较复杂,因此需要花费一些时间去理解它。将MVC运用到应用程序中,会带来额外的工作量,增加应用的复杂性,所以MVC不适合小型应用程序。但对于开发存在大量用户界面且业务逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构
6、方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远的角度考虑,它会大大提高后期软件开发的效率。,7.1.2 JSP Model1和JSP Model2 尽管MVC设计模式很早就出现了,但在Web应用开发中引入MVC却是步履维艰。主要原因是在早期的Web应用开发中,程序语言和HTML的分离一直难以实现。例如,在JSP网页中执行业务逻辑的程序代码和HTML表示层数据混杂在一起,因而很难分离出单独的业务模型。这使得维护JSP网页非常困难,很难满足用户变化性的需求。,在早期的Java Web应用中,JSP文件负责业务逻辑、控制网页流程并创建HTML。如图7.2所示,JSP文件是
7、一个独立的、自主完成所有任务的模块。这给Web开发带来一系列问题:HTML代码和Java程序强耦合在一起,因此,JSP文件的编写者必须既是网页设计者,又是Java开发者。但实际情况是,多数Web开发人员要么只精通网页设计,能够设计出漂亮的网页外观,编写的Java代码却很糟糕;要么仅熟悉Java编程,能够编写出健壮的Java代码,设计的网页外观却很难看。具备两种才能的开发人员很少见。JSP作为自主独立模块存在以下问题: (1) 内嵌的流程逻辑:要理解应用程序的整个流程,必须浏览所有网页。试想一下,拥有100个网页的网站的错综复杂的逻辑。,(2) 调试困难:除了很糟的外观之外,HTML标记、Jav
8、a代码和JavaScript代码都集中在一个网页中,使调试变得相当困难。 (3) 强耦合:更改业务逻辑或数据可能牵涉相关的多个网页。 (4) 美学:设想有1000行代码的网页,其编码样式看起来杂乱无章,即使有彩色语法显示,阅读和理解这些代码仍然比较困难。,图7.2 JSP作为自主独立的模块,为了解决以上问题,Sun公司先后制定了两种规范,称为JSP Model1和JSP Model2。虽然Model1在一定程度上实现了MVC,但是它的运用并不理想,直到基于J2EE的JSP Model2问世才得以改观。JSP Model2用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用Jav
9、aBean技术实现模型的功能。JSP Model1和JSP Model 2的本质区别在于处理用户请求的位置不同。,在Model1体系中,如图7.3所示,JSP页面负责提供表示层数据,同时充当视图和控制器,未能实现这两个模块之间的独立和分离。尽管Model1体系十分适合简单应用的需要,但它却不适合开发复杂大型应用程序。不加选择地随意运用Model1,会导致JSP页内嵌入大量的Java代码。尽管这对于Java程序员来说可能不是什么大问题,但如果JSP页面是由网页设计人员开发并维护的(通常这是开发大型项目的规范),这就确实是个问题了。从根本上讲,将导致角色定义不清和职责分配不明,给项目带来很多麻烦。
10、,图7.3 JSP Model1,JSP Model2体系结构(如图7.4所示)是一种联合使用JSP与Servlet来提供动态内容服务的方法。它吸取了JSP和Servlet两种技术各自的突出优点,用JSP生成表示层的内容,让Servlet完成深层次的处理任务。在这里,Servlet充当控制器的角色,负责处理用户请求,创建JSP页内没有的处理逻辑,负责检索原先由Servlet创建的JavaBean对象,从Servlet中提取动态内容插入到静态模板。这是一种有突破性的软件设计方法,它清晰地分离了页面表达和功能实现,明确了角色定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model2设计
11、模式的好处就越大。,图7.4 JSP Model2,7.1.3 Struts实现MVC的机制 Struts 实质上是在JSP Model2的基础上实现的一个MVC框架。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action来实现,视图由一组JSP文件构成。图7.5显示了Struts实现的MVC框架。,图7.5 Struts实现的MVC框架,7.2 Struts的概念及特征,7.2.1 Struts框架内容 伴随着软件开发的发展,在多层的软件开发项目中,可重用、易扩展的而且是经过良好测试的软件组件越来越为人们所青睐。 人们可以
12、将充裕的时间用在分析、构建业务逻辑的应用上,而非繁杂的代码工程。于是,人们将相同类型问题的解决途径进行抽象,抽取成一个应用框架。这也就是我们所说的Framework。,Framework体系提供了一套明确的机制,从而让开发人员很容易地扩展和控制整个Framework开发上的结构。通常,Framework的结构中都有一个“命令和控制”组件(“command and control“ component)-Framework Factory and Manager。 Struts由一组相互协作的类、Servlet及JSP TagLib组成。基于Struts构架的Web应用程序基本上符合JSP Mo
13、del2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对Framework的描述,我们很容易理解为什么说Struts是一个Web Framework,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。,Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易地与数据访问技术相结合,包括EJB、JDBC和Object Relation Bridge。在视图层,Struts能够与JSP、Velocity Templates、XSL等表示层
14、组件相结合。,7.2.2 Struts实现的MVC设计模式 Struts把MVC设计模式运用到Web应用中,它由一组相互协作的类、Servlet及JSP Tag Library组成。,7.2.3 Struts与Web App的关系 既然Struts叫做Web Framework,那么其肯定是主要基于Web层的应用系统开发。按照J2EE Architecture的标准,Struts应当和Jsp/Servlet一样,存在于Web Container层。 图7.6所示为Struts与Web App的关系。,图7.6 Struts与WebApp的关系,7.3 Struts的工作原理和组件,7.3.1
15、ActionServlet控制器对象 ActionServlet是对javax.servlet.http.HttpServlet进行了扩展后的一个类,它不是一个抽象类,而是一个可以被你的应用程序用来产生控制器对象的类。它的主要任务就是在框架里捆绑和路由一个HTTP通讯到一个适当的处理器。就像其他的Servlet一样,ActionServlet需要在Web应用程序描述文档里进行配置。,按照Servlet的标准,所有的Servlet必须在Web配置文件(web.xml)声明。同样,ActionServlet必须在Web Application配置文件(web.xml)中描述。有关配置信息如下: a
16、ction org.apache.struts.action.ActionServlet ,全部的请求URI以*.do的模式存在并映射到这个Servlet,其配置如下: action *.do ,一个该模式的请求URI符合如下格式: http:/www.my_site_ 中心控制器为所有的表示层请求提供了一个集中的访问点,这个控制器提供的抽象概念减轻了开发者建立公共应用系统服务的困难,如管理视图、会话及表单数据。它也提供一个通用机制,如错误及异常处理、导航、国际化、数据验证和数据转换等。,当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,就会将请求信息转交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Action类,从而实现自己的Action实例。,7.3.2 Actionm