《第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框架简介l在Web应用开发中,MVC框架应用非常广泛,特别是在大型的、比较复杂的项目中。8.1.1 MVC框架是什么 8.1.2为什么要用MVC 8.1.3 MVC的实现8.1.1 MVC框架是什么l基于Java的动态Web开发有两种常用的开发模型:Model1和Model2。lModel1 在Model 1模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户
2、端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。Web服务器响应请求浏览器 JSPJavaBean企业数据库lModel 1模式的实现比较简单,适用于快速开发小规模项目。但从工程化的角度看,它的局限性非常明显:JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。Model2lModel2实现了业务逻辑、显示逻辑和控制逻辑的分离,即是基于MVC的框架。lMVC框架即模型视图控制器(ModelViewController)设计模式。其中,M代表Model,V代
3、表View,C代表ControllerlMVC的目的是增加代码的可重用性,减少数据描述和应用操作的可耦合度,并提高代码的可读性。l同时,也可以使软件的可维护性、可扩展性、可修复性、灵活性以及封装性大大提高。在Model 2模式下,模型(Model)由JavaBean 充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。实例化(模型)JavaBeanWeb服务器响应请求浏览器(控制器)Servlet企业数据库(视图)JSPMVC包括以下三部分:l视图:视图是应用程序的表示层,代表用户交互界面。在Web应用中,交互界面可能是HTML界面,也有可能是XML
4、界面、Applet界面或其他界面。l模型:模型是应用程序的业务处理层,负责所有业务流程的处理和业务规则的制定。模型处理由控制器发来的视图的请求数据,并将最终的处理结果返回给视图。l控制器:控制器的作用实际上就是一个分发器,负责决定将请求数据转发给什么样的模型组件,以及决定选择什么样的视图来显示模型返回的数据。一个基于MVC的应用程序对用户请求的处理过程:(1)终端用户通过应用程序发出了一个请求,该请求被转发给控制器。(2)控制器收到该请求后,检查该请求然后决定用什么样的业务逻辑来处理该请求,这时控制器会将该请求转发给一个相应的业务组件去处理。(3)模型中包含处理该用户请求的所有业务组件,并且也
5、执行用户所需要的全部数据存取。代表终端用户查询检索出的任何数据都被打包返回给控制器。(4)控制器接收从模型返回的数据,并选择显示这些数据的相应的视图,然后将视图返回给用户。lMVC模式适合大型项目的开发,是组件式的开发,但开发起来相对Model1复杂,步骤较多。8.1.2为什么要用MVClMVC框架的优点如下:有利于程序的维护和功能的扩展。有利于开发中的分工。有利于组件的重用。8.1.3 MVC的实现【例例8.18.1】MVCMVC的实现。的实现。l本节采用JSPServletJavaBean技术开发一个体重指数测量程序。l本例是一个根据身高和体重数据来衡量体重状况的程序。l程序包含4个文件,
6、分别是:view_Table.jsp controller_Servlet.java model_Bean.java view_Result.jsp l对身高和体重数据的处理计算是在模型层实现的,其中运用的业务规则是世界卫生组织拟定的体重状况的判断标准。体重指数(BMI)的计算公式是:体重指数(BMI)=体重(kg)/身高(米)的平方 世界卫生组织拟定的BMI指数与体重状况的对应关系是:BMI在18.525 体重在正常范围 BMI大于25小于30 体重状况为超重 BMI大于30 体重状况为较肥胖 BMI小于18.5 体重状况为偏瘦(1)Model层的实现lModel(模型)层是软件中的核心模块
7、,负责实现软件所有的业务逻辑,所有的数据处理都是在这里进行的。Model层用JavaBean来实现。l类model_Bean是Model层的具体实现。新建一个类model_Bean,文件名为model_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 setB
8、mi(String w,String h)/BMI体重指数double wt=Double.parseDouble(w);/将字符串类型的体重数据转换成double类型double ht=Double.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 S
9、tring getBmi()return bmi;public void setResult(String bmi)/根据BMI指数大小判定体型double bmit=Double.parseDouble(bmi);if(bmit18.5&bmit25&bmit30)result=您太.重了,请注意饮食结构,加强锻炼!;elseresult=您的体形偏瘦,请注意营养!;public String getResult()return result;/将处理结果返回控制层组件controller_Servlet 模型层负责对其接收的身高和体重数据进行处理,这些数模型层负责对其接收的身高和体重数据进
10、行处理,这些数据是视图层以表单的方式采集而来的,接下来将给出视图据是视图层以表单的方式采集而来的,接下来将给出视图层的代码。层的代码。(2)View层的实现 View(视图)层提供了一个表单以采集用户的身高和体重数据。view_Table.jsp文件源代码如下:世界卫生组织标准体重测定 看看您的体重状态如何 体重 公斤身高 米   视图层采集的数据提交给控制层,控制层转发给模型层处理,模型层接收控制层转发来的数据并对数据进行处理,处理结 果返回给控制层。(3)Control层的实现 控制层的具体功能是向模型层转发请求数据以及回收数据处理的结果,同
11、时生成结果显示页面,返回给用户。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 controller_Servlet extends
12、HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException /抛出接受请求的过程中的异常信息 doPost(request,response);public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException /抛出发送信息的过程中异常信息 String we
13、ight=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_Bean的实例Pro,调用模型层组件model_Bea
14、n处理身高和体重信息 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);/获得 RequestDispatcher对象 req
15、uestDispatcher.forward(request,response);/转发 显示测试结果的页面view_Result.jsp文件源代码如下:%/输出返回信息String BMI=(String)request.getAttribute(BMI);String result=(String)request.getAttribute(result);out.println();out.println();out.println();out.println(您的BMI体重指数为:+BMI+);out.println(result);out.println();%l注意:编译contro
16、ller_Servlet.java文件时,需要将Tomcat安装目录下的commonlib目录下的servlet-api.jar,添加到JDK安装目录下的jdk1.6.0jrelibext目录下面,否则会编译失败。l因为文件所包含的软件包 javax.servlet在Web服务器中才有,JDK中并没有。也可以按照第三章例3.1所介绍的方法配置环境变量。l然后新建一个配置文件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)将本例所有文件及文件夹放在MVC文件夹中,并放在Tomcat安装目录下的webapps文件夹下,启动Tomcat,打开IE浏览器,在地址栏中输入地址:http:/localhost:8080/MVC/view_Table.