第6章 Web应用的MVC设计模式_第1页
第6章 Web应用的MVC设计模式_第2页
第6章 Web应用的MVC设计模式_第3页
第6章 Web应用的MVC设计模式_第4页
第6章 Web应用的MVC设计模式_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

第6章Web应用的MVC设计模式本章主要内容MVC模式的概念 Model1和JavaBeanModel2的编写学生管理系统6.1什么是MVCMVC:ModelViewController

模型

视图

控制器MVC是一种经典的设计模式,体现了代码的分层思想,将应用程序中的数据处理、数据展示和流程控制分开,每个部分各司其职。Model作为业务层用来处理业务逻辑View是视图层,用来展示数据Controller作为控制层负责控制和调度流程,是Model和View之间的桥梁MVC的开发模式已经成为较大型JavaWeb开发的标准配置6.1什么是MVC模型:处理“业务”,应用程序的主体部分,交由模型完成。模型组织业务逻辑,对业务数据增删改查,为视图提供结果数据。视图:用户看到的并与之交互的界面。视图向用户展示相关的数据,并能接收用户的输入,但它并不进行任何实际的业务处理。控制器:视图和模型之间的桥梁,负责流程控制。从某个视图接收数据,将数据交给相应的模型进行处理,再将处理的结果交给相应的视图展示。Model26.2Model1和JavaBeanJavaBean的概念(1)JavaBean必须是一个public类,具有包定义。(2)如果类的成员变量名是xxx,那么需要提供存/取这个属性的set/get方法,并命名为setXxx和getXxx。set和get后属性名首字母必须大写。(3)如果成员变量是boolean型,允许使用isXxx代替getXxx方法名。(4)类中所有方法的访问控制都必须是public。(5)类中必须有无参的构造方法。(6)实现序列化接口。6.2Model1和JavaBean【例】定义一个可以求三角形面积的JavaBean。packagecal;importjava.text.DecimalFormat;publicclassTriangleBeanimplementsSerializable{ privatedoublea,b,c; publicTriangleBean(){//无参构造方法 } //public的set/get方法 publicdoublegetA(){ returna; } publicvoidsetA(doublea){ this.a=a; } //其他set/get方法,此处省略 publicStringgetArea(){//业务方法 if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b){ doubles=(a+b+c)/2; doublearea=Math.sqrt(s*(s-a)*(s-b)*(s-c)); returnnewDecimalFormat("##0.00").format(area); }else{ return"您输入的三边有误"; } }}6.2Model1和JavaBeanJavaBean的作用域和使用引入JavaBean的<jsp:useBean>动作标签

<jsp:useBeanid=""scope=""class=""/>scope:指定在哪个范围内使用,

page→reqeust→session→applicationclass:JavaBean对应的类id:JavaBean的唯一标识6.2Model1和JavaBean【例】利用TriangleBean求三角形面积。<jsp:useBeanid="tri"scope="request"class="cal.TriangleBean"/><%

try{

doublea=Double.parseDouble(request.getParameter("a"));

doubleb=Double.parseDouble(request.getParameter("b"));

doublec=Double.parseDouble(request.getParameter("c")); tri.setA(a); tri.setB(b); tri.setC(c); out.print(tri.getArea());//调用JavaBean进行计算 }catch(Exceptione){ out.println("您输入的三边长有误"); }%>6.2Model1和JavaBean【例】利用Model1改写豆瓣短评代码。6.3Model2的编写—模型层Model2适合业务逻辑复杂的大型应用程序,这些应用程序底层通常由数据库存储管理业务数据,因此Model层由数据库访问的DAO完成。为了提高代码的可扩展性,DAO以接口的方式出现,再由具体的数据库操作去实现接口。使用这种面向接口编程的方式,即便是更换底层的数据表示,DAO接口的应用也可以保持稳定。接口实现类实现类实现类6.3Model2的编写—模型层DAO接口中的方法主要针对数据表的增删改查。public

interfaceStudentDao{

public

voidsave(Studentstu);//向数据表增加一个学生数据

public

voidupdate(int

id,Studentstu);//按照id更新学生数据

public

voiddelete(int

id);//按id删除学生

publicStudentfindById(int

id);//按照id查询学生

publicList<Student>findAll();//获取student表中所有记录

}public

classStudentDaoImplimplementsStudentDao{ //基于底层的数据存储,实现接口中的各方法}6.3Model2的编写—控制器控制器由Servlet担任,接受请求并分发给不同的处理。在复杂系统中会存在大量请求,为每一个请求配置一个Servlet控制器会很浪费,所以在Model2中通常会将Servlet合并,令其接收一组请求,并赋予这些请求相同的标识。<servlet>

<servlet-name>main</servlet-name>

<servlet-class>web.MainServlet</servlet-class></servlet>

<servlet-mapping>

<servlet-name>main</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>find.do表示查询请求add.do表示添加数据的请求update.do表示修改数据的请求……注意,后缀匹配时不再在路径中加“/”符号。6.3Model2的编写—控制器<% //查看路径表示

out.print("请求的路径信息:"+request.getRequestURL()+"<br/>"); out.print("请求资源路径:"+request.getRequestURI()+"<br/>");

out.print("请求的Web应用路径:"+request.getContextPath()+"<br/>"); out.print("请求的Servlet路径:"+request.getServletPath()+"<br/>");%>:8080/chap5/request.jspURLURI/chap5/request.jspContextPath/chap5ServletPath/request.jsp统一资源定位器:uniformresourcelocator统一资源标识符:uniformresourceidentifier上下文路径Servlet路径/user/reg6.3Model2的编写—控制器Stringpath=request.getServletPath(); if(path.equals("/add.do")){ //……}else

if(path.equals("/delete.do")){ //……}else

if(path.equals("/update.do")){ //……}else

if(path.equals("/find.do")){ //……}else{ //……}6.3Model2的编写—到达视图(转发和重定向)相同之处:解决两个web组件(Servlet/JSP)之间跳转的问题。转发的特点转发过程只包含一次请求(一个request)转发地址栏不变可以通过request共享数据不能转发到项目之外的资源6.3Model2的编写—到达视图(转发和重定向)重定向特点两次请求地址改变使用两个request,不能通过request共享数据(session)可以重定向到项目外部的资源6.3Model2的编写—到达视图(转发和重定向)使用场景的规律查询:转发增加、删除、修改:重定向到查询/add.do/update.do/delete.do/find.dolist.jspfind.do转发重定向6.4学生管理系统1、建库建表数据库stu、数据表student2、项目中的代码组织entity包:存储系统中的实体dao包:存储数据库访问的口子包dao.impl:存储该接口的实现web包:存储Servletutil包

:工具类src:配置文件WEB-INF:jsp文件(防止直接从地址栏访问)WEB-INF/lib:jar包WebContent:html页面、图片文件夹、js文件夹、样式文件夹3、学生信息浏览find.do(1)依照学生数据表结构创建学生实体类。(2)建立数据库访问DAO接口及其实现类,完成查询所有学生信息的方法的设计。(3)建立Servlet类,对查询功能的请求、响应进行处理。(4)编写JSP页面,显示查询得到的学生信息。4、添加学生信息(1)DAO实现类,完成添加学生信息的方法。(2)MainServlet类对添加功能的请求进行处理调用DAO将数组存储至数据表重定向至find.do

5、修改学生信息(1)点击超链接后先根据id找到要修改的学生<input

type="button"

value="修改"

onclick="location.href='toUpdate.do?id=<%=s.getId()%>';"

/>

5、修改学生信息(2)编写DAO实现类,根据id找到要修改

温馨提示

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

评论

0/150

提交评论