版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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页面组成
2、, jsp页面接收处理客户端请求,对请求处理后直接做出响应。 用少量的javabean来处理数据库连接、数据库访问等操作。 web服务器 响应 请求 浏 览 器 jsp javabean 企业 数据库 lmodel 1模式的实现比较简单,适用于 快速开发小规模项目。但从工程化的 角度看,它的局限性非常明显: jsp页面身兼view和controller两种角色, 将控制逻辑和表现逻辑混杂在一起,从而 导致代码的重用性非常低,增加了应用的 扩展性和维护的难度。 model2 lmodel2实现了业务逻辑、显示逻辑和控制逻辑 的分离,即是基于mvc的框架。 lmvc框架即模型视图控制器(model
3、view controller)设计模式。其中, m代表model, v代表view, c代表controller lmvc的目的是增加代码的可重用性,减少数据 描述和应用操作的可耦合度,并提高代码的可 读性。 l同时,也可以使软件的可维护性、可扩展性、 可修复性、灵活性以及封装性大大提高。 在model 2模式下,模型(model)由javabean 充当,视图(view)由jsp页面充当,而控制 器(controller)则由servlet充当。 实例化 (模型) javabean web服务器 响应 请求浏 览 器 (控制器) servlet 企业 数据库 (视图) jsp mvc包括以
4、下三部分: l视图:视图是应用程序的表示层,代表用户交互界 面。在web应用中,交互界面可能是html界面,也有 可能是xml界面、applet界面或其他界面。 l模型:模型是应用程序的业务处理层,负责所有业 务流程的处理和业务规则的制定。模型处理由控制 器发来的视图的请求数据,并将最终的处理结果返 回给视图。 l控制器:控制器的作用实际上就是一个分发器,负 责决定将请求数据转发给什么样的模型组件,以及 决定选择什么样的视图来显示模型返回的数据。 一个基于mvc的应用程序对用户请求的处 理过程: (1)终端用户通过应用程序发出了一个请求,该请求被 转发给控制器。 (2)控制器收到该请求后,检查
5、该请求然后决定用什么 样的业务逻辑来处理该请求,这时控制器会将该请求转 发给一个相应的业务组件去处理。 (3)模型中包含处理该用户请求的所有业务组件,并且 也执行用户所需要的全部数据存取。代表终端用户查询 检索出的任何数据都被打包返回给控制器。 (4)控制器接收从模型返回的数据,并选择显示这些数 据的相应的视图,然后将视图返回给用户。 lmvc模式适合大型项目的开发,是组件式的开发,但开 发起来相对model1复杂,步骤较多。 8.1.2为什么要用mvc lmvc框架的优点如下: 有利于程序的维护和功能的扩展。 有利于开发中的分工。 有利于组件的重用。 8.1.3 mvc的实现 【例【例8.1
6、8.1】mvcmvc的实现。的实现。 l本节采用jspservletjavabean技术 开发一个体重指数测量程序。 l本例是一个根据身高和体重数据来衡量 体重状况的程序。 l程序包含4个文件,分别是: view_table.jsp controller_servlet.java model_bean.java view_result.jsp l对身高和体重数据的处理计算是在模型层实 现的,其中运用的业务规则是世界卫生组织 拟定的体重状况的判断标准。 体重指数(bmi)的计算公式是: 体重指数(bmi)=体重(kg)/身高(米)的平 方 世界卫生组织拟定的bmi指数与体重状况的 对应关系是:
7、bmi在18.525 体重在正常范围 bmi大于25小于30 体重状况为超重 bmi大于30 体重状况为较肥胖 bmi小于18.5 体重状况为偏瘦 (1)model层的实现 lmodel(模型)层是软件中的核心模块, 负责实现软件所有的业务逻辑,所有的数 据处理都是在这里进行的。model层用 javabean来实现。 l类model_bean是model层的具体实现。新 建一个类model_bean,文件名为 model_bean.java,目录名为web-inf/src, 存放在mvc_test包中。 model_bean.java文件源代码如下: package mvc_test; pu
8、blic 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.parsedouble(h); /将字 符串类型的身高数据转换成double类型 double bmit =wt/(ht*ht); /按给定
9、公式计算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.parsedouble(bmi); if(bmit18.5 else result=您的体形偏瘦,请注意营养!; public
10、 string getresult() return result; /将处理结果返回控制 层组件controller_servlet 模型层负责对其接收的身高和体重数据进行处理,这些数模型层负责对其接收的身高和体重数据进行处理,这些数 据是视图层以表单的方式采集而来的,接下来将给出视图据是视图层以表单的方式采集而来的,接下来将给出视图 层的代码。层的代码。 (2)view层的实现 view(视图)层提供了一个表单以采集用户的身高和体 重数据。view_table.jsp文件源代码如下: 世界卫生组织标准体重测定 看看您的体重状态如何 体重 公斤 身高 米 import java.io.*;
11、import javax.servlet.*; import javax.servlet.http.*; import mvc_test.model_bean; public class controller_servlet extends httpservlet public void doget(httpservletrequest request,httpservletresponse response) throws ioexception,servletexception /抛出接受请求的过 程中的异常信息 dopost(request,response); public void
12、dopost(httpservletrequest request,httpservletresponse response) throws ioexception,servletexception /抛出发送信息的过 程中异常信息 string weight=request.getparameter(weight);/获取表单中 体重的字符串信息 string height=request.getparameter(height);/获取表单中 身高的字符串信息 model_bean pro =new model_bean(); / 建立一个model_bean的实例pro pro.setb
13、mi(weight,height); string bmi=pro.getbmi(); pro.setresult(bmi); string result=pro.getresult(); /通过建立一个model_bean的实例pro,调用模型层 组件model_bean处理身高和体重信息 response.setcontenttype(text/html; charset=gb2312);/指定以中文字符集显示返回信息 request.setattribute(result,result); request.setattribute(bmi,bmi); /使用requestdispatch
14、er 转发至显示视图页面 /view_result.jsp requestdispatcher requestdispatcher=request.getrequestdispatcher(/v iew_result.jsp);/获得 requestdispatcher 对象 requestdispatcher.forward(request,response);/ 转发 显示测试结果的页面view_result.jsp文件源代码如下: % /输出返回信息 string bmi = (string) request.getattribute(bmi); string result = (str
15、ing) request.getattribute(result); out.println(); out.println(); out.println(); out.println(您的bmi体重指数为: + + bmi + ); out.println(result); out.println(); % l注意:编译controller_servlet.java文件时, 需要将tomcat安装目录下的commonlib目录下 的servlet-api.jar,添加到jdk安装目录下的 jdk1.6.0jrelibext目录下面,否则会编 译失败。 l因为文件所包含的软件包 javax.se
16、rvlet在 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文件夹中,并放在 tom
17、cat安装目录下的webapps文件夹下,启动tomcat,打 开ie浏览器,在地址栏中输入地址: http:/localhost:8080 /mvc/view_table.jsp,运行结 果如图8.3所示。 (5)在表单中输入数据,单击提交按钮,运行结果如图8.4 所示。 图8.3 用户输入界面 图8.4 测试结果页面 8.2 用struts2实现mvc设计模式 l传统的mvc应用开发非常复杂,使用struts控制器可 以大大简化mvc应用程序的开发,尤其是大型的应用 软件项目的开发。struts作为一个开放源代码的应 用框架,在最近几年得到了飞速的发展,在jsp web 应用开发中应用得非
18、常广泛。 l8.2.1 struts概述 l8.2.2 struts2的安装与测试 l8.2.3 struts2的配置 l8.2.4 struts 2的常用标签 l8.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的技术先进程度要优于struts
19、1, 但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前必须安装以下
20、两个软件: ljdk1.4以上版本,此处使用最新版的jdk6(或叫 jdk1.6)。 lservlet container,此处使用tomcat5.5。 (2)下载struts安装包 struts最新版安装包struts2.1.2可在 /download.cgi#struts2 12上免费下载。下载页面如图8.3所示。 图8.3 struts2下载页 面 8.2.2 struts2的安装与测试 l选择下载full distribution版本,struts 2安装包 只是一个简单的压缩文件,解压即可。使用解压软 件解压后,目录结构如图8.5所示。
21、图8.5 struts目录 结构 8.2.2 struts2的安装与测试 该目录结构内容如下: lappsapps:该文件夹下包含了基于struts 2的示例 应用,这些示例应用对于学习者是非常有用的 资料。 ldocsdocs:该文件夹下包含了struts 2的相关文档, 包括struts 2的快速入门、struts 2的文档, 以及api文档等内容。 lbackportbackport:该文件夹下包含了让struts 2支持 jdk 1.4的jar文件。 lliblib:该文件夹下包含了struts 2框架的核心 类库,以及struts 2的第三方插件类库。 lsrcsrc:该文件夹下包含
22、了struts 2框架的全部 源代码。 8.2.2 struts2的安装与测试 (3)安装struts2 struts 2的安装是非常简单的,只是将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的安装与测试 l将struts2解压后的lib文件夹下 stru
23、ts2-core-2.1.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 l等必需类库复制到web应用的web-inf/lib路径下, 这些jar文件是运行简单struts2应用的最小集合。 当然,如果web应用需要使用struts 2的更多特性, 则需要将更多的jar文件复制到web应用的web- inf/lib路径下。 (4)测试struts 2 l在struts目录结构下,apps中包含了4个示例程序: str
24、uts2-blank-2.1.2.war struts2-mailreader-2.1.2.war struts2-portlet-2.1.2.war struts2-showcase-2.1.2.war l 将struts2-blank-2.1.2.war文件拷贝到tomcat安装 目录下的webapps目录下,启动tomcat,会自动将 struts2-blank-2.1.2.war文件解压发布。 l在浏览器中输入:http:/localhost:8080/struts2- blank-2.1.2/example/helloworld.action,会返回 struts的应用示例界面, 8
25、.2.2 struts2的安装与测试 8.2.3 struts2的配置 lstruts2的配置可以分成三个单独的文件,如图8.7所示 图8.7 框架元素的配置文件 1. 配置web.xml filterdispatcher是一个servlet过滤器,它是整个web 应用的配置项,需要在“web.xml”中进行配置: action2 org.apache.struts2.dispatcher.filterdispatcher action2 /* 2. perties文件 l此文件提供了一种更改框架默认行为方式的机 制。在一般情况下,如果不是打算让调试更加 方便的话,不需要更
26、改这个文件。 l perties文件在web-inf/classes目 录下存放。这个文件用来配置struts2系统的一 些基本规约,所有在perties中配置 的内容都可以在struts.xml中配置,或者 web.xml中在struts2 filter中配置 perties中的如下配置: struts.i18n.encoding=utf-8 相当于struts.xml中的如下配置: 相当于web.xml中的如下配置: struts org.apache.struts2.dispatcher.filterdispat cher st
27、ruts.i18n.encoding true 3. struts.xml文件 lstruts.xml文件中包含的是开发action时所需 要修改的配置信息。本章中所讨论的配置信息, 都可以被其他方式所代替,比如注解,web.xml 启动参数和可替换的url映射方案。 l必须要在struts.xml中进行配置的信息只有全 局结果、异常处理和自定义的拦截器堆栈。 典型的struts.xml文件结构如下所示: 其中标签位于struts2配置的最外层,其他标签 都是包含在它里面的。 8.2.4 struts 2的常用标签 lstruts 2的标签库是struts 2的重要组成部分, struts 2
28、的标签库提供了非常丰富的功能,这些标签 库不仅提供了表现层数据处理,而且提供了基本的流 程控制功能,还提供了国际化、ajax支持等功能。 l通过使用struts 2的标签,开发者可以最大限度地减 少页面代码的书写。 l要在jsp中使用struts 2标签,需要在jsp文件的顶部 加入以下代码: l struts 2的标签可以分为两类:通用标签和ui标签。 1. 通用标签 l通用标签用来在页面表示的时候控制代码执行 的过程,这些标签也允许从action或者值堆栈 中取得数据。 l通用标签分为以下三类: 控制标签,用于控制程序执行,例如:if,else, iterator。 数据标签,用于管理数据
29、的取得和创建,例如: property,set,push等。 杂项标签,为一些特殊需求设计的,例如:include, url,i18n,text,param等。 1. 通用标签 (1)控制标签 控制标签用于控制程序的执行,包括if标 签、iterator标签等。 ifif标签标签 if标签用来控制基本的条件处理流程,通 常和else标签或者elseif标签连用。该标签参 数如下所示。 if tag if tag maxs file here scotts file here others file here literatoriterator标签标签 literator标签用于遍历集合 (ja
30、va.util.collection)或枚举值 (java.util.iterator)。它需要的参数如表8.4所 示。 iterator names: !- white 此外,控制标签还有sort, generator, append标签等。 (2)数据标签 l数据标签用来提供各种数据相关的功能,范围从显 示一个action的直接结果到获取本地化的数值等。 数据标签包括property,bean,set,push,action 标签等 lpropertyproperty标签标签 property标签是struts 2中比较常用的标签。 property标签用于得到“value”的属性,如果
31、value没提供,默认为堆栈顶端的元素。它需要的参 数如表8.5所示。 lsetset标签标签 set标签赋予变量一个特定范围内的值。当希望给一 个变量赋一个复杂的表达式,每次访问该变量而不是 复杂的表达式时用到。其在两种情况下非常有用: 复杂的表达式很耗时 (用于性能提升) 很难理解 (用于提高代码可读性)。 它需要的参数如表8.6所示。 l如下代码每次都要使用#sessionuser, 代码冗长而且容易出错: l这里可以使用set标签定义临时变量: push标签标签 lset标签可以在action context中放置数据,而 push标签则可以将对象的引用压入值栈中,这 在对单个对象做大
32、量操作是非常有用的。可以 将对象压入值栈之后直接对其进行操作,而不 需要在每个表达式之前都加上对象的名字。 push标签的参数表: l如上面的例子可以写成如下代码: l 此外数据标签还包括bean标签和action标 签。 (3)杂项标签 lincludeinclude标签标签 include标签与jsp的动作功能类 似,在用struts 2进行开发时,此标签较常用。它 用于包含一个servlet的输出(servlet或jsp的页 面)。 lurlurl标签标签 li18ni18n标签标签 ltexttext标签标签 lparamparam标签标签 2. ui标签 lui标签也叫html标签,
33、它又可以分为 表单ui 非表单ui l表单ui部分基本与struts 1.x相同,都是对html表 单元素的包装。 l因为这些标志很多都经常用到,而且参数也很多。 需要深入了解这些标志,可以查看以下网址: /display/ww2cndoc/tags webwork2文档中文化计划(中文) /ww/tag-reference.html tag developers guide(英文) 8.2.5 struts 2的action l有struts 1.x经验的都知道action是struts的核心内容, 当
34、然struts 2也不例外。不过,struts 1.x与struts 2.0的 action模型很大的区别。 l虽然,理论上struts 2.0的action无须实现任何接口或 继承任何类型,但是,我们为了方便实现action,大 多数情况下都会继承 com.opensymphony.xwork2.actionsupport类,并重载 (override)此类里的string execute()方法。 8.3 struts的web应用开发实 例 【例【例8.28.2】struts 2 struts 2 应用实例。应用实例。 l以下通过一个基于struts2的web应用程序来展 现struts
35、2的基本使用方法。 l这个程序的功能是让用户输入两个整数,并提 交给一个struts action,在action中计算这 两个数的代数和,如果代数和为非负数,则跳 转到positive.jsp页面,否则跳转到 negative.jsp页面。 l本例web应用的文件结构如图8.8所示。 8.3 struts的web应用开发实 例 1. 安装struts 2 用myeclipse在tomcat安装目录下的webapps目录 下新建web应用工程struts2example,需要注意的是: webroot目录下的文件夹和文件需要放在web应用的 根目录下才能正确访问。将所需的包放入web- inf
36、lib目录中,本实例所需的包有:struts2- core-2.1.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。 l2. 配置web.xml 要使struts能正常工作,需修改web-inf目录下的 web.xml的内容,为其增加struts2的 filterdispatcher, 修改后的web.xml的内容如下: struts2 org.apache.struts2.dispatcher.filterd
37、ispatcher struts2 /* 3. 编写action类 firstaction.java代码如下: 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页面
38、return positive; else / 如果代码数和是负整数,跳到negative.jsp页面 return negative; 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.prin
39、tln(operand2); this.operand2 = operand2; public int getsum() return operand1 + operand2; / 计算两个整数的代码数和 l本文件存放在web应用程序下的 srcaction目录下. l从上述代码可看出,action类的一个特 征就是要覆盖execute方法,只是struts2 的execute方法没有参数了,而struts1.x 的execute方法有四个参数。而且execute 方法的返回值也不同的。struts2只返回 一个string,用于表述执行结果(就是 一个标志)。 4. 配置struts.xml
40、文件 这一步struts1.x和struts2.x都是必须的,只是在struts1.x中的配置文 件一般叫struts-config.xml,而且一般放到web-inf目录中。而 在struts2.x中的配置文件一般为struts.xml,放到web- infclasses目录中。 配置好的struts.xml文件代码如下: /positive.jsp /negative.jsp 8.3 struts的web应用开发实 例 l在标签中可以有多个,其extends 属性继承一个默认的配置文件“struts-default”, 一般都继承于它。 l标签中的name属性表示动作名,class表示动 作类名。 l标签的name实际上就是execute方法返回的字 符串,如果返回的是“positive”,就跳转到 positive.jsp页面,如果是“negative
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人行道砖施工方案
- 2026年施工员之装饰施工专业管理实务测试卷含答案
- 保温施工工艺
- 2026重庆交通大学考核招聘50人(第一批)笔试题库含答案详解【综合卷】
- 隧道机电工程通风、照明、报警、广播、通风及照明、配电、消防、预埋管线施工组织技术标
- 人格与健康培训
- 施工交流方案
- 电力施工技术方案要点
- 2026年全国一级建造师之一建港口与航道工程实务考试专项攻坚题附答案560
- 安全教育培训内容与形式设计
- 2026年甘肃开放大学招聘事业编制工作人员笔试题库附完整答案详解(考点梳理)
- 2026年度新泰市市属国有企业公开招聘工作人员笔试参考题库及答案详解
- 2026年中小学生安全知识竞赛试题(附答案)
- 课件:《中华民族共同体概论》第十五讲:新时代与中华民族共同体建设
- CJT 288-2017 预制双层不锈钢烟道及烟囱
- 煤矿岗位作业流程标准化指导手册(一)
- (特殊场景版)合同法第二十三章 居间合同
- 【zkw线段树讲稿】统计的力量-线段树
- 现代大学英语课件-lesson-1-half-a-day
- GM/T 0030-2014服务器密码机技术规范
- 电厂化学-3水的预处理
评论
0/150
提交评论