32 MVC设计模式指导书v10_第1页
32 MVC设计模式指导书v10_第2页
32 MVC设计模式指导书v10_第3页
32 MVC设计模式指导书v10_第4页
32 MVC设计模式指导书v10_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MVC设计模式操作模式指导书通过本部分学习,能够完成如下几个目标。•了解什么是MVC设计模式•熟练掌握如何定义视图部分•熟练掌握如何定义模型部分•熟练掌握如何定义控制器部分MVC设计模式最先是由TrygveReenskaug提出的,并最先成功的应用在SmallTalk-80环境中,是许多交互式界面系统的构成基础。Microsoft的MFC基础类也遵循了MVC的思想。MVC把交互系统的组成分解成模型、视图、控制器三种部件。(1) 模型部分,是业务的流程、状态的处理和业务规则的制定。它是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,它独立于具体的界面表达和I/O操作。(2) 视图部分,代表用户界面。它是表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。(3) 控制器部分,接收用户请求,分配合适的模型和视图。它是用来处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图具有一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。MVC设计模式被广泛的用到了许多的程序设计中,本章主要来介绍JavaWeb开发中使用到的MVC设计模式。对于MVC的出现首先是解决了多个视图对应一个模型的能力,由于用户的需求是不断变化的,例如来自于数据库的一个表单就可能显示在不同的应用界面中;其次MVC中模型所返回的数据显示不会带有任何的格式,所以可以将其直接应用于接口;第三,MVC的三个应用层次中只需要改变一层,就可以满足用户的改变。MVC中也存在一些缺点,例如使用MVC增加了系统结构和实现的复杂性;视图和控制器之间的联系比较紧密,如果失去控制器,则会限制视图的应用。首先来看什么是Model1模式。以前面编写的那个登录项目为例,那就是典型的使用Model1模式开发的,整个Web项目都是由JSP页面构成。其中登录判断页LoginConf.jsp既要接受客户端的请求,还必须对其用户信息判断进行跳转。JSP页面既要负责显示还要负责控制,将控制逻辑和表现逻辑混在一起了。使用Model1模式开发代码重用性非常低,对于功能相似的代码只能选择拷贝的方式,而不是直接调用。这样使得整个JSP页面充斥着功能类似的代码。使用Model1模式开发程序扩展性也非常差,如果以后想要给程序扩展功能那是非常困难的。假如在一个JSP页面添加了某一功能,那么可能其他的很多页面都需要变动,甚至于整个Web应用都要修改。这种牵一发而动全身的应用,会使得后期异常的困难和繁琐。JSP页面中大量充斥着Java脚本,这使得后期的维护非常困难。有时候一个地方出现错误就要到处去找。还有代码重用性,经常就是在使用拷贝、粘贴,都成了一种习惯了。不过使用Model1模式来开发比较简单和方便。使用Model1模式来开发确实简单,所以如果是小型的Web站点,后期的更新和维护工作不是很大,就可以采用Model1模式来开发。Model2是基于MVC架构的设计模式。MVC包含三个基本部分,分别是Model

(模型)、View(视图)、Controller(控制器)。JSP只用负责显示,而控制器则由Servlet充当,模型由JavaBean充当。浏览器浏览器数据库We服务器数据库Model1的程序流程比较容易理解。用户提交信息给JSP页面,JSP接受用户提交的值并通过JavaBean连接数据库并操作数据库,然后将结果返回给用户。Model2中就是将JSP的功能简化了,在Model1中JSP负责的东西过多了。Model2中使用Servlet来充当控制器,而JSP只是充当显示。至于为什么会这样设计是因为在JSP里面进行接受参数和判断还有跳转等功能会用到大量的Java脚本代码。过多的Java脚本代码使得页面维护起来非常困难,而Servlet本来就是一个Java文件,这样使用Servlet来接受参数和判断还有跳转等功能是非常合适的。可以把Servlet看成是一个大管家,它负责所有的业务逻辑并通过JavaBean来操作数据库以及决定显示页面。(Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。)如果要使用MVC设计模式,那么控制器要使用Servlet。具体的逻辑判断则交给业务逻辑组件来判断,而将业务逻辑组件判断的结果返回交给Servlet来判断并实现跳转。MVC设计模式开发过程:(1) 用户登录页面一View:Login.jsp(2) 用户登录成功和失败页面——View:LoginSucess.jsp,LoginFailure.jsp业务逻辑组件一Model:LoginCheck.javaServlet控制器一Controller:LoginConf.javaServlet配置文件一Web.xml1用户登录页面--View用户登录页面一般会包含一个表单,用来接收用户输入的登录信息,并提交到后台的Servlet中进行判断处理,然后实现跳转。示例代码Login.jsp<%@pagelanguage="java"contentType="text/htmL;charset=gb2312"%><html><head><title>用户登录</title></head><body><center><h2>用户登录</h2><%--登录表单--%><formaction="LoginConf"method="post">//提交Servlet中判断处理,实现跳转<table><tr><td>用户名:</td><%--接收用户输入的用户名,其name属性为uname--%><td><inputtype="text"name="uname"></td></tr><tr><%--接收用户输入的密码,其name属性为upassword--%><td>密  码:</td><td><inputtype="password"name="upassword"></td></tr><tr><tdcolspan="2"><%--登录按钮和重置按钮--%><inputtype="submit"value="登录”〉<inputtype="reset"value="重置"></td></tr></table></form></center></body></html>2用户登录成功和失败页面--View用户登录成功和失败页面用来向用户提示是否登录成功。用户登录成功页面还将对用户合法性进行判断,如果用户不是合法登录的,将会跳转回登录页面。登录成功页面示例代码Login_success.jsp<%@pagelanguage="java"contentType="text/htmL;charset=gb2312"%><html><head><title>登录成功</title></head><body><center><%if(session.getAttribute("login")!=null&&session.getAttribute("login").equals("true")){%><h2>登录成功</h2><%}else{%><jsp:forwardpage="Login.jsp"></jsp:forward><%}%></center></body></html>登录失败页面示例代码Login_failure.jsp<%@pagelanguage="java"contentType="text/htmL;charset=gb2312"%><html><head><title>登录失败</title></head><body><center><h2>登录失败</h2></center></body></html>3业务逻辑组件--Model业务逻辑组件用来负责业务逻辑的处理,一个复杂的业务逻辑组件还需要调用其他组件,如DAO组件,从而完成业务逻辑判断。示例代码LoginCheck.javapackagecom.javaweb.ch14;publicclassLoginCheck{〃判断是否为合法用户publicbooleanisLogin(Stringusername,Stringpassword){if("James”.equals(username)&&"123456”.equals(password)){returntrue;)else{returnfalse;}}}4Servlet控制器一ControllerServlet控制器是整个MVC设计模式的核心,首先需要接受到用户所传递的参数,然后要调用业务逻辑类以完成对业务的处理,最后根据所处理的结果进行页面的跳转。例如用户登陆,获取到用户名和密码,然后对两个参数的准确性进行判断,如果输入正确则跳转到成功界面中,否则跳转到登陆失败界面。示例代码LoginConf.javapackagecom.javaweb.ch14;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;publicclassLoginConfextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,lOException{〃接受用户参数Stringusername=request.getParameter("uname");Stringpassword=request.getParameter("upassword");〃获得session对象HttpSessionsession=request.getSession();//new一个LoginCheck对象LoginChecklc=newLoginCheck();〃调用业务逻辑组件的判断功能来判断if(lc.isLogin(username,password)){〃如果为合法用户,在request范围中添加属性login,其属性值为true,并跳转到登录成功页session.setAttribute("login","true");request.getRequestDispatcher("Login_success.jsp").forward(request,response);)else{〃如果非法用户跳转到登陆失败页request.getRequestDispatcher("Login_failure.jsp").forward(request,response);}}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}5Web.xml配置<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="/xmL/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xmL/ns/javaee/xmL/ns/javaee/web-ap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论