第8章Struts和MVC设计模式.ppt

上传人:夺命阿水 文档编号:751284 上传时间:2023-11-07 格式:PPT 页数:79 大小:1.79MB
返回 下载 相关 举报
第8章Struts和MVC设计模式.ppt_第1页
第1页 / 共79页
第8章Struts和MVC设计模式.ppt_第2页
第2页 / 共79页
第8章Struts和MVC设计模式.ppt_第3页
第3页 / 共79页
第8章Struts和MVC设计模式.ppt_第4页
第4页 / 共79页
第8章Struts和MVC设计模式.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《第8章Struts和MVC设计模式.ppt》由会员分享,可在线阅读,更多相关《第8章Struts和MVC设计模式.ppt(79页珍藏版)》请在课桌文档上搜索。

1、第8章 Struts和MVC设计模式,第8章 Struts和MVC设计模式,8.1 MVC框架简介8.2 用Struts2实现MVC设计模式8.3 Struts的Web应用开发实例 8.4 小结 8.5 习题,8.1 MVC框架简介,在Web应用开发中,MVC框架应用非常广泛,特别是在大型的、比较复杂的项目中。8.1.1 MVC框架是什么 8.1.2为什么要用MVC 8.1.3 MVC的实现,8.1.1 MVC框架是什么,基于Java的动态Web开发有两种常用的开发模型:Model1和Model2。Model1在Model 1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客

2、户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。,Model 1模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度看,它的局限性非常明显:JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。,Model2,Model2实现了业务逻辑、显示逻辑和控制逻辑的分离,即是基于MVC的框架。MVC框架即模型视图控制器(ModelViewController)设计模式。其中,M代表Model,V代表View,C代表ControllerMVC的目的是增加代

3、码的可重用性,减少数据描述和应用操作的可耦合度,并提高代码的可读性。同时,也可以使软件的可维护性、可扩展性、可修复性、灵活性以及封装性大大提高。,在Model 2模式下,模型(Model)由JavaBean 充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。,MVC包括以下三部分:,视图:视图是应用程序的表示层,代表用户交互界面。在Web应用中,交互界面可能是HTML界面,也有可能是XML界面、Applet界面或其他界面。模型:模型是应用程序的业务处理层,负责所有业务流程的处理和业务规则的制定。模型处理由控制器发来的视图的请求数据,并将最终的处理结

4、果返回给视图。控制器:控制器的作用实际上就是一个分发器,负责决定将请求数据转发给什么样的模型组件,以及决定选择什么样的视图来显示模型返回的数据。,一个基于MVC的应用程序对用户请求的处理过程:,(1)终端用户通过应用程序发出了一个请求,该请求被转发给控制器。(2)控制器收到该请求后,检查该请求然后决定用什么样的业务逻辑来处理该请求,这时控制器会将该请求转发给一个相应的业务组件去处理。(3)模型中包含处理该用户请求的所有业务组件,并且也执行用户所需要的全部数据存取。代表终端用户查询检索出的任何数据都被打包返回给控制器。(4)控制器接收从模型返回的数据,并选择显示这些数据的相应的视图,然后将视图返

5、回给用户。MVC模式适合大型项目的开发,是组件式的开发,但开发起来相对Model1复杂,步骤较多。,8.1.2为什么要用MVC,MVC框架的优点如下:有利于程序的维护和功能的扩展。有利于开发中的分工。有利于组件的重用。,8.1.3 MVC的实现,【例8.1】MVC的实现。本节采用JSPServletJavaBean技术开发一个体重指数测量程序。本例是一个根据身高和体重数据来衡量体重状况的程序。程序包含4个文件,分别是:view_Table.jspcontroller_Servlet.javamodel_Bean.javaview_Result.jsp,对身高和体重数据的处理计算是在模型层实现的

6、,其中运用的业务规则是世界卫生组织拟定的体重状况的判断标准。体重指数(BMI)的计算公式是:体重指数(BMI)=体重(kg)/身高(米)的平方世界卫生组织拟定的BMI指数与体重状况的对应关系是:BMI在18.525 体重在正常范围BMI大于25小于30 体重状况为超重BMI大于30 体重状况为较肥胖BMI小于18.5 体重状况为偏瘦,(1)Model层的实现,Model(模型)层是软件中的核心模块,负责实现软件所有的业务逻辑,所有的数据处理都是在这里进行的。Model层用JavaBean来实现。类model_Bean是Model层的具体实现。新建一个类model_Bean,文件名为model_

7、Bean.java,目录名为WEB-INF/src,存放在mvc_Test包中。,Model_Bean.java文件源代码如下:package mvc_Test;public class model_Bean/构造函数public model_Bean()/私有成员private String result;private String bmi;/体重指数/公有成员public void setBmi(String w,String h)/BMI体重指数double wt=Double.parseDouble(w);/将字符串类型的体重数据转换成double类型double ht=Double

8、.parseDouble(h);/将字符串类型的身高数据转换成double类型double bmit=wt/(ht*ht);/按给定公式计算BMI体重指数,bmit*=10;int bmitt=(int)bmit;bmit=(double)bmitt/10;bmi=String.valueOf(bmit);/通过在浮点型和整型之间,先后进行相互的强制转换,使BMI指数只保留一位小数。public String getBmi()return bmi;public void setResult(String bmi)/根据BMI指数大小判定体型double bmit=Double.parseDou

9、ble(bmi);if(bmit18.5,else if(bmit25/将处理结果返回控制层组件controller_Servlet 模型层负责对其接收的身高和体重数据进行处理,这些数据是视图层以表单的方式采集而来的,接下来将给出视图层的代码。,(2)View层的实现 View(视图)层提供了一个表单以采集用户的身高和体重数据。view_Table.jsp文件源代码如下:世界卫生组织标准体重测定 看看您的体重状态如何,  视图层采集的数据提交给控制层,控制层转发给模型层处理,模型层接收控制层转发来的数据并对数据进行处理,处理结 果返回给控制层。,(3)Control层的实现 控制层的具

10、体功能是向模型层转发请求数据以及回收数据处理的结果,同时生成结果显示页面,返回给用户。Control层用Servlet实现。首先新建一个类controller_Servlet,对应文件名为controller_Servlet.java,目录名为WEB-INF/src,放在包mvcTest中。controller_Servlet.java源代码如下:package mvc_Test;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import mvc_Test.model_Bean;,public class

11、 controller_Servlet extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException/抛出接受请求的过程中的异常信息 doPost(request,response);public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletExceptio

12、n/抛出发送信息的过程中异常信息 String weight=request.getParameter(weight);/获取表单中体重的字符串信息 String height=request.getParameter(height);/获取表单中身高的字符串信息 model_Bean Pro=new model_Bean();/建立一个model_Bean的实例Pro,Pro.setBmi(weight,height);String BMI=Pro.getBmi();Pro.setResult(BMI);String result=Pro.getResult();/通过建立一个model_B

13、ean的实例Pro,调用模型层组件model_Bean处理身高和体重信息 response.setContentType(text/html;charset=gb2312);/指定以中文字符集显示返回信息 request.setAttribute(result,result);request.setAttribute(BMI,BMI);/使用RequestDispatcher 转发至显示视图页面/view_Result.jsp RequestDispatcher requestDispatcher=request.getRequestDispatcher(/view_Result.jsp);/

14、获得 RequestDispatcher对象 requestDispatcher.forward(request,response);/转发,显示测试结果的页面view_Result.jsp文件源代码如下:);out.println();out.println();out.println(您的BMI体重指数为:+BMI+);out.println(result);out.println();%,注意:编译controller_Servlet.java文件时,需要将Tomcat安装目录下的commonlib目录下的servlet-api.jar,添加到JDK安装目录下的jdk1.6.0jreli

15、bext目录下面,否则会编译失败。因为文件所包含的软件包 javax.servlet在Web服务器中才有,JDK中并没有。也可以按照第三章例3.1所介绍的方法配置环境变量。然后新建一个配置文件web.xml,放在目录WEB-INF下。视图组件view_Table.jsp需要配置文件提供路径才能找到控制组件controller_Servlet.java,这些需要在web.xml中配置。,8.1.3 MVC的实现,web.xml源代码如下:control mvc_Test.controller_Servlet control/controller_Servlet,8.1.3 MVC的实现,(4)将

16、本例所有文件及文件夹放在MVC文件夹中,并放在Tomcat安装目录下的webapps文件夹下,启动Tomcat,打开IE浏览器,在地址栏中输入地址:http:/localhost:8080/MVC/view_Table.jsp,运行结果如图8.3所示。(5)在表单中输入数据,单击提交按钮,运行结果如图8.4所示。图8.3 用户输入界面 图8.4 测试结果页面,8.2 用Struts2实现MVC设计模式,传统的MVC应用开发非常复杂,使用Struts控制器可以大大简化MVC应用程序的开发,尤其是大型的应用软件项目的开发。Struts作为一个开放源代码的应用框架,在最近几年得到了飞速的发展,在JS

17、P Web应用开发中应用得非常广泛。8.2.1 Struts概述 8.2.2 Struts2的安装与测试8.2.3 Struts2的配置8.2.4 Struts 2的常用标签8.2.5 Struts 2的Action,8.2.1 Struts概述,1.什么是Struts Struts是一个用于简化MVC框架(Framework)开发的Web应用框架,用于快速开发Java Web应用。2.Struts2简介 Struts2的诞生源于OpenSynphony的著名Web框架WebWork,和Struts1一样,WebWork也是主流的Web框架之一。WebWork的技术先进程度要优于Struts1

18、,但Struts1却具有更广泛的客户群。2005年,双方决定合作开发下一代的Web框架,Struts2于是诞生。从技术层面讲,Struts2采用了WebWork的核心技术而与Struts1完全不兼容。,8.2.1 Struts概述,3.Struts1与Struts2的对比 根据Struts2开发组的文章可以得知,Struts2与Struts1的不同之处如表8.1所示。表8.1 Struts2与Struts1的不同之处,表8.1 Struts2与Struts1的不同之处,8.2.2 Struts2的安装与测试,(1)安装Struts2需要的软件在安装Struts2前必须安装以下两个软件:JDK1

19、.4以上版本,此处使用最新版的JDK6(或叫JDK1.6)。Servlet Container,此处使用Tomcat5.5。(2)下载Struts安装包 Struts最新版安装包Struts2.1.2可在http:/struts.apache.org/download.cgi#struts212上免费下载。下载页面如图8.3所示。,图8.3 Struts2下载页面,8.2.2 Struts2的安装与测试,选择下载Full Distribution版本,Struts 2安装包只是一个简单的压缩文件,解压即可。使用解压软件解压后,目录结构如图8.5所示。图8.5 Struts目录结构,8.2.2

20、Struts2的安装与测试,该目录结构内容如下:apps:该文件夹下包含了基于Struts 2的示例应用,这些示例应用对于学习者是非常有用的资料。docs:该文件夹下包含了Struts 2的相关文档,包括Struts 2的快速入门、Struts 2的文档,以及API文档等内容。backport:该文件夹下包含了让Struts 2支持JDK 1.4的JAR文件。lib:该文件夹下包含了Struts 2框架的核心类库,以及Struts 2的第三方插件类库。src:该文件夹下包含了Struts 2框架的全部源代码。,8.2.2 Struts2的安装与测试,(3)安装Struts2 Struts 2的

21、安装是非常简单的,只是将JAR文件复制到相应目录即可。在正确安装好JDK和Tomcat后,把lib目录下的相关JAR文件拷贝到Web应用的lib目录中,同时修改Web应用的web.xml文件,添加Struts 2的配置。一般普通的Web应用目录结构如下:Web应用名称(如Bank):|-WEB-INF|classes|lib|web.xml|index.jsp,8.2.2 Struts2的安装与测试,将Struts2解压后的lib文件夹下struts2-core-2.1.2.jarxwork-2.1.1jarognl-2.6.11.jarcommons-logging-1.0.4.jarcom

22、mons-fileupload-1.2.1.jarfreemarker-2.3.12.jar等必需类库复制到Web应用的WEB-INF/lib路径下,这些jar文件是运行简单Struts2应用的最小集合。当然,如果Web应用需要使用Struts 2的更多特性,则需要将更多的JAR文件复制到Web应用的WEB-INF/lib路径下。,(4)测试Struts 2,在Struts目录结构下,apps中包含了4个示例程序:struts2-blank-2.1.2.warstruts2-mailreader-2.1.2.warstruts2-portlet-2.1.2.warstruts2-showcas

23、e-2.1.2.war 将struts2-blank-2.1.2.war文件拷贝到Tomcat安装目录下的webapps目录下,启动Tomcat,会自动将struts2-blank-2.1.2.war文件解压发布。在浏览器中输入:http:/localhost:8080/struts2-blank-2.1.2/example/HelloWorld.action,会返回Struts的应用示例界面,,8.2.2 Struts2的安装与测试,8.2.3 Struts2的配置,Struts2的配置可以分成三个单独的文件,如图8.7所示 图8.7 框架元素的配置文件,1.配置web.xml,Filter

24、Dispatcher是一个servlet过滤器,它是整个Web应用的配置项,需要在“web.xml”中进行配置:action2 org.apache.struts2.dispatcher.FilterDispatcher action2/*,2.struts.properties文件此文件提供了一种更改框架默认行为方式的机制。在一般情况下,如果不是打算让调试更加方便的话,不需要更改这个文件。struts.properties文件在WEB-INF/classes目录下存放。这个文件用来配置Struts2系统的一些基本规约,所有在struts.properties中配置的内容都可以在struts.

25、xml中配置,或者web.xml中在struts2 filter中配置,struts.properties中的如下配置:struts.i18n.encoding=UTF-8相当于struts.xml中的如下配置:相当于web.xml中的如下配置:struts org.apache.struts2.dispatcher.FilterDispatcher struts.i18n.encoding true,3.struts.xml文件 struts.xml文件中包含的是开发Action时所需要修改的配置信息。本章中所讨论的配置信息,都可以被其他方式所代替,比如注解,web.xml启动参数和可替换的

26、URL映射方案。必须要在struts.xml中进行配置的信息只有全局结果、异常处理和自定义的拦截器堆栈。,典型的struts.xml文件结构如下所示:其中标签位于Struts2配置的最外层,其他标签都是包含在它里面的。,8.2.4 Struts 2的常用标签,Struts 2的标签库是Struts 2的重要组成部分,Struts 2的标签库提供了非常丰富的功能,这些标签库不仅提供了表现层数据处理,而且提供了基本的流程控制功能,还提供了国际化、Ajax支持等功能。通过使用Struts 2的标签,开发者可以最大限度地减少页面代码的书写。要在JSP中使用Struts 2标签,需要在JSP文件的顶部加

27、入以下代码:Struts 2的标签可以分为两类:通用标签和UI标签。,1.通用标签,通用标签用来在页面表示的时候控制代码执行的过程,这些标签也允许从Action或者值堆栈中取得数据。通用标签分为以下三类:控制标签,用于控制程序执行,例如:if,else,iterator。数据标签,用于管理数据的取得和创建,例如:property,set,push等。杂项标签,为一些特殊需求设计的,例如:include,url,i18n,text,param等。,1.通用标签,(1)控制标签 控制标签用于控制程序的执行,包括if标签、iterator标签等。if标签 if标签用来控制基本的条件处理流程,通常和e

28、lse标签或者elseif标签连用。该标签参数如下所示。,if Tag if Tag Maxs file here Scotts file here Others file here,iterator标签 iterator标签用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。它需要的参数如表8.4所示。,Iterator Names:!-,White 此外,控制标签还有sort,generator,append标签等。,(2)数据标签,数据标签用来提供各种数据相关的功能,范围从显示一个Action的直接结果到获取本地化的数值等。数据标签包

29、括property,bean,set,push,action标签等property标签 property标签是struts 2中比较常用的标签。property标签用于得到“value”的属性,如果value没提供,默认为堆栈顶端的元素。它需要的参数如表8.5所示。,set标签 set标签赋予变量一个特定范围内的值。当希望给一个变量赋一个复杂的表达式,每次访问该变量而不是复杂的表达式时用到。其在两种情况下非常有用:复杂的表达式很耗时(用于性能提升)很难理解(用于提高代码可读性)。它需要的参数如表8.6所示。,如下代码每次都要使用#sessionuser,代码冗长而且容易出错:这里可以使用set

30、标签定义临时变量:,push标签set标签可以在Action Context中放置数据,而push标签则可以将对象的引用压入值栈中,这在对单个对象做大量操作是非常有用的。可以将对象压入值栈之后直接对其进行操作,而不需要在每个表达式之前都加上对象的名字。push标签的参数表:,如上面的例子可以写成如下代码:此外数据标签还包括bean标签和action标签。,(3)杂项标签,include标签 include标签与JSP的动作功能类似,在用Struts 2进行开发时,此标签较常用。它用于包含一个servlet的输出(servlet或jsp的页面)。url标签 i18n标签 text标签 param

31、标签,2.UI标签,UI标签也叫HTML标签,它又可以分为表单UI非表单UI表单UI部分基本与Struts 1.x相同,都是对HTML表单元素的包装。因为这些标志很多都经常用到,而且参数也很多。需要深入了解这些标志,可以查看以下网址:http:/wiki.javascud.org/display/ww2cndoc/Tags WebWork2文档中文化计划(中文)http:/cwiki.apache.org/WW/tag-reference.html Tag Developers Guide(英文),8.2.5 Struts 2的Action,有Struts 1.x经验的都知道Action是St

32、ruts的核心内容,当然Struts 2也不例外。不过,Struts 1.x与Struts 2.0的Action模型很大的区别。虽然,理论上Struts 2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的String execute()方法。,8.3 Struts的Web应用开发实例,【例8.2】Struts 2 应用实例。以下通过一个基于Struts2的Web应用程序来展现Struts 2的基本使用方法。这个程序的功能是让用

33、户输入两个整数,并提交给一个Struts Action,在Action中计算这两个数的代数和,如果代数和为非负数,则跳转到positive.jsp页面,否则跳转到negative.jsp页面。,本例Web应用的文件结构如图8.8所示。,8.3 Struts的Web应用开发实例,1.安装Struts 2 用MyEclipse在Tomcat安装目录下的webapps目录下新建Web应用工程struts2Example,需要注意的是:WebRoot目录下的文件夹和文件需要放在Web应用的根目录下才能正确访问。将所需的包放入WEB-INFlib目录中,本实例所需的包有:struts2-core-2.1

34、.2.jar、xwork-2.1.1jar、ognl-2.6.11.jar、commons-logging-1.0.4.jar、commons-fileupload-1.2.1.jar和freemarker-2.3.12.jar。2.配置web.xml 要使Struts能正常工作,需修改WEB-INF目录下的web.xml的内容,为其增加Struts2的FilterDispatcher,修改后的web.xml的内容如下:,struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*,3.编写Action类FirstAction.j

35、ava代码如下:package action;import com.opensymphony.xwork2.ActionSupport;public class FirstAction extends ActionSupport private int operand1;private int operand2;public String execute()throws Exception if(getSum()=0)/如果代码数和是非负整数,跳到positive.jsp页面return positive;else/如果代码数和是负整数,跳到negative.jsp页面return negat

36、ive;,public int getOperand1()return operand1;public void setOperand1(int operand1)System.out.println(operand1);this.operand1=operand1;public int getOperand2()return operand2;public void setOperand2(int operand2)System.out.println(operand2);this.operand2=operand2;public int getSum()return operand1+op

37、erand2;/计算两个整数的代码数和,本文件存放在Web应用程序下的srcaction目录下.从上述代码可看出,Action类的一个特征就是要覆盖execute方法,只是Struts2的execute方法没有参数了,而Struts1.x的execute方法有四个参数。而且execute方法的返回值也不同的。Struts2只返回一个String,用于表述执行结果(就是一个标志)。,4.配置struts.xml文件这一步struts1.x和struts2.x都是必须的,只是在struts1.x中的配置文件一般叫struts-config.xml,而且一般放到WEB-INF目录中。而在struts

38、2.x中的配置文件一般为struts.xml,放到WEB-INFclasses目录中。配置好的struts.xml文件代码如下:/positive.jsp/negative.jsp,8.3 Struts的Web应用开发实例,在标签中可以有多个,其extends属性继承一个默认的配置文件“struts-default”,一般都继承于它。标签中的name属性表示动作名,class表示动作类名。标签的name实际上就是execute方法返回的字符串,如果返回的是“positive”,就跳转到positive.jsp页面,如果是“negative”,就跳转到negative.jsp页面。,5.编写JS

39、P页面本例共有三个JSP页面:主页面sum.jsp两个转向页面positive.jsp和negative.jsp这三个JSP文件都存放在Web应用程序根目录下。(1)sum.jsp页面在此页面中,用户可以输入两个整数,提交到Action进行求和运算,其代码如下:,输入操作数求代数和,在sum.jsp中使用了Struts2带的标签。在Struts2中已经将Struts1.x的几个标签库统一了,在Struts2中只有一个标签库/struts-tags。这里面包含了所有的Struts2标签。需要注意的是,在中最好都使用Struts2标签,尽量不要用HTML或普通文本。上例中的表单内容将提交到Firs

40、tAction进行处理。页面运行结果如图8.9所示。图8.9 主界面sum.jsp运行结果,(2)positive.jsp页面,如果Action中的计算结果为非负值,则转向positive.jsp页面,其代码如下:显示代数和代数和为非负整数,8.3 Struts的Web应用开发实例,在主页面中输入3和5两个数,页面运行结果如图8.10所示。图8.10 当运算结果为非负整数时转向的页面,8.3 Struts的Web应用开发实例,negative.jsp页面如果Action中的计算结果为负值,则转向negative.jsp页面,其代码如下:显示代数和代数和为负整数,8.3 Struts的Web应用

41、开发实例,在主页面中输入-3和-5两个数,页面运行结果如图8.11所示。图8.11 当运算结果为负整数时转向的页面 这两个jsp页面的实现代码基本一样,其中都使用了一个标签来显示Action类中的sum属性值。,8.4 小结,本章介绍了Java Web开发的两种模式:Model1和Model2。其中,Model1采用JSP开发系统或采用JSPJavaBean的开发模式,在开发小型系统时具有较大的优势,但不适用于大规模项目的开发。而Model2实现了业务逻辑、显示逻辑和控制逻辑的分离,是基于MVC的开发模式,适用于大型项目的开发,是组件式的开发。本章还介绍了用Struts2以及如何用Struts

42、2实现MVC。,8.5 习题,1.单选题(1)MVC中的M是指()。A.Model B.View C.Controller D.以上都不对(2)MVC中的V是指()。A.Model B.View C.Controller D.以上都不对(3)MVC中的C是指()。A.Model B.View C.Controller D.以上都不对(4)有关struts 2的说法不正确的是()A.Struts是一个用于简化MVC框架(Framework)开发的Web应用框架 B.应用Struts 2不需要进行配置 C.Struts 2 含有丰富的标签 D.Struts2采用了WebWork的核心技术2.上机练习 参考例8.2,用Struts 2编写一个用户登录的简单Web应用程序。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号