《JSP程序设计(第二版)》课件 第5章 MVC设计模式_第1页
《JSP程序设计(第二版)》课件 第5章 MVC设计模式_第2页
《JSP程序设计(第二版)》课件 第5章 MVC设计模式_第3页
《JSP程序设计(第二版)》课件 第5章 MVC设计模式_第4页
《JSP程序设计(第二版)》课件 第5章 MVC设计模式_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

5.1任务1:基于MVC实现漫画类型的删除与修改任务描述在管理员主页(admin.jsp),点击“更多种类”链接,跳转到种类列表页面(typeList.jsp),显示所有漫画类型;点击“删除”链接,完成漫画类型的删除操作;点击“修改”链接,跳转到种类修改页面(editType.jsp),完成漫画类型的修改操作。任务描述技能目标理解JavaBean的概念与应用能够基于MVC完成数据操作技能目标5.1.1JavaBean简介一、JavaBean的概念广义上来说,任何一个构成Java应用程序的class文件,都叫JavaBean。广义JavaBean一般可以分为两类:1、数据承载bean,即实体类,如User、Cartoon、CartoonType等用于储存数据的类。2、业务处理bean,比如项目中数据访问层和业务逻辑层的功能类,专门用于数据处理。狭义上来说,JavaBean是特殊的Java类,遵守JavaBeanAPI规范。具体要求如下:1、该类必须声明为public类;2、该类必须可序列化,即实现Serializable接口;3、该类必须有无参构造器(使用默认的无参构造或者显式定义);4、类中所有属性必须是私有的,并提供相应的setter、getter方法;一般情况下,数据承载bean会被定义成满足JavaBeanAPI规范的bean。5.1.1JavaBean简介二、<jsp:useBean>动作元素<jsp:useBean>动作用来加载一个将在JSP页面中使用的JavaBean。该动作可以发挥Java组件复用的优势。其语法形式如下:<jsp:useBeanid="beanName"class="package.class"scope="page|request|session|application"/>其中,id属性代表一个JavaBean的唯一标识,在执行JSP时,JavaBean被实例化为对象,其对象名就是这个id;然后,将这个对象存储在scope指定的作用域中,所用的属性名也是这个id。class属性用于指定这个JavaBean所对应的Java类的全名称。scope属性用于指定JavaBean的作用范围,scope的值可以是page、request、session、application四者之一,默认为page。5.1.1JavaBean简介1、<jsp:setProperty>动作元素用来设置已经实例化的bean对象的属性,有两种用法:第一种用法:在<jsp:useBean>元素的外面(后面)使用语法形式如下:<jsp:useBeanid="myName"...></jsp:useBean>...<jsp:setPropertyname="myName"property="someProperty"value="value".../>此时,不管jsp:useBean是找到了一个现有的bean,还是新创建了一个bean实例,jsp:setProperty都会执行。其中,name属性指定JavaBean的名称,它的值应与<jsp:useBean>动作中的id属性值一致;property属性指定要设置的JavaBean的属性名称;value属性指定bean属性的值。5.1.1JavaBean简介

第二种用法:在<jsp:useBean>元素的内部使用语法形式如下:<jsp:useBeanid="myName"...>...<jsp:setPropertyname="myName"property="someProperty"value="value".../></jsp:useBean>此时,jsp:setProperty只有在新建bean实例时才会执行,如果是使用现有实例则不执行。5.1.1JavaBean简介property属性有一种特殊用法,语句格式如下:<jsp:setPropertyname="myName"property="*"/>其中,“*”表示JSP引擎将发送到JSP页面的请求参数逐个地和JavaBean的属性名称进行匹配,当用户请求参数的名称与JavaBean的属性名称相匹配时,自动完成属性赋值。5.1.1JavaBean简介2、<jsp:getProperty>动作元素<jsp:getProperty>动作元素用于提取指定bean属性的值,转换成字符串,然后输出。语法格式如下:<jsp:useBeanid="myName".../>...<jsp:getPropertyname="myName"property="someProperty".../>其中,name用于指定bean名称;property用于指定要从bean中检索的属性名称。5.1.2MVC编程模式在MVC模式中,应用程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。其中,模型部分包含了应用程序的业务逻辑和业务数据;视图部分封装了应用程序的输出形式,也就是通常所说的页面或者是界面;而控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。5.1.3JSPModel1与Model21、传统的JSPModel1模型在传统的Model1模式下,整个Web应用全部由JSP页面组成,JSP页面接收处理客户端请求,并做出响应。5.1.3JSPModel1与Model22、改进的JSPModel1模型在改进的Model1模式下,用少量的JavaBean来处理数据库访问等操作,由JSP页面与JavaBean共同协作完成任务。5.1.3JSPModel1与Model23、JSPModel2模式JSPModel2中使用了JSP、Servlet和JavaBean三种技术。其中,JSP负责生成动态网页,只用做界面;Servlet负责流程控制,用来处理各种请求的分派;JavaBean负责业务逻辑及对数据库的操作。5.1.4MVC模式与三层架构的区别任务实现一、搭建三层架构,并完成数据访问层代码1、新增数据访问接口方法在数据访问接口(CartoonTypeDao)中,新增返回漫画类型列表(List<CartoonType>getTypeList())、根据编号删除漫画类型(intdelType(inttypeid))及漫画类型修改(intupdateType(CartoonTypetype))三个方法。任务实现2、实现数据访问方法在数据访问类(CartoonTypeDaoImpl)中,结合通用BaseDao,实现数据访问接口中新增的三个方法。任务实现二、完成业务逻辑层代码在业务逻辑接口(CartoonTypeBiz)中,新增返回漫画类型列表(List<CartoonType>getTypeList())、根据编号删除漫画类型(intdelType(inttypeid))及漫画修改(intupdateType(CartoonTypetype))三个方法;并在业务逻辑类(CartoonTypeBizImpl)中,通过调用数据访问层的方法,实现这三个方法。任务实现三、创建漫画类型列表页面在Web根目录WebRoot下的adminpages文件夹中,新建漫画列表页面typeList.jsp。任务实现四、创建漫画类型修改页面在WebRoot/adminpages下,新建漫画修改页面editList.jsp。其中,action属性中的typeservlet是用于进行流程控制的Servlet,即控制器;URL参数opr用于指定操作类型,del表示删除,edit表示修改;URL参数typeid用于传递当前漫画类型的编号,作为删除或修改漫画类型的条件。任务实现六、实现Servlet控制器新建控制器TypeServlet,在doPost()方法中获取URL地址栏参数opr和typeid,并根据opr参数值调用业务逻辑层相应的删除或修改方法。任务实现七、设置框架链接在管理员主页admin.jsp中,添加<iframe>框架标签,并用超链接属性target将其设置为目标框架。拓展与提高在JavaWeb项目中可以将一些通用的配置(如产品名称等)放置在.properties文件中,然后在页面中直接读取配置值;在需要对通用配置做变更时即可做到一处修改、处处生效。拓展与提高可以使用java.util包下的ResourceBundle来读取properties文件中的属性,步骤如下:1、在JSP页面中引入java.util包<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>2、使用ResourceBundle加载properties文件ResourceBundleresource=ResourceBundle.getBundle("FileName");//不需要properties扩展名3、读取配置值resource.getString("ArgName");//参数为属性名

以下是获取配置文件的属性值的完整代码:<%@pagelanguage="java"import="java.util.*"

pageEncoding="UTF-8"%><%ResourceBundleresource=

ResourceBundle.getBundle("database");StringdriverStr=resource.getString("driver");out.print(driverStr);StringurlStr=resource.getString("url");out.print(urlStr);%>总结JavaBean简介 编程模式

JSPModel1与Model2

MVC模式与三层架构的区别

谢谢大家观看

5.2任务2:实现漫画类别的分页显示任务描述实现漫画类别的分页显示。任务描述技能目标理解分页的原理能够实现数据的分页显示技能目标5.2.1分页技术简介一、分页的概念分页是一种将所有数据分段展示给用户的技术。用户每次看到的不是全部数据,而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过指定页码或是翻页的方式变换可见内容,直到找到自己想要的内容为止。这和我们阅读书籍很类似。二、分页的方法在Web开发中,对数据库进行查询后,如何对结果进行分页显示呢?一般的分页方法有如下两种:1、“假”分页把数据库中所有的相关记录都查询出来,一次性返回给客户端,然后在客户端控制分页,指定每页显示的记录。2、“真”分页对数据库进行多次查询,每次只获取本页的数据,即由程序通过SQL语句控制分页,每一次访问数据库,只返回一页大小的数据,显示到客户端。5.2.2分页的实现思路实现“真”分页,需要以下几个关键步骤:确定每页显示的数据数量;确定分页显示的总页数;确定当前需要显示的是第几页;根据当前页码和每页的数据量编写SQL查询语句,实现数据查询;在JSP页面中设置分页显示。对于每页显示的数据量,一般在开发时,根据实际页面设计,提前定义好;也可以由用户自己来选择。5.2.2分页的实现思路对于分页的总页数,需要由符合条件的记录总数和每页的数据量来确定。步骤如下:1、借助聚合函数count()可以获取记录总数。例如:selectcount(typeid)fromcartoonType;2、根据记录总数和每页的数据量,可以借助三元运算符计算总页数。假设记录总数为count,每页数据量为pageSize,总页数为pageCount,计算方法如下:pageCount=count%pageSize==0?(count/pageSize):(count/pageSize)+1;对于在JSP页面中切换页面,可以通过超链接和URL参数实现。例如:<ahref='adminpages/typeList.jsp?pageNo=<%=pageNo-1%>'>上一页</a>

<ahref='adminpages/typeList.jsp?pageNo=<%=pageNo+1%>'>下一页</a>其中,pageNo变量代表当前页码。另外,还需要通过该变量进行边界控制,保证其变化范围只能是从1到最大页码(也就是总页数)。5.2.2分页的实现思路MySQL数据库可以通过limit字句实现分页功能。limit子句有两个参数,分别代表起始行偏移量和最大返回行数。其中,最大返回行数是一个固定值,相当于每页显示的记录数;起始行偏移量是动态的,如果要显示第5页,则偏移量就是前4页的总记录数,即4*pageSize。可以总结出如下规律:起始行偏移量=(当前页码-1)*每页显示的记录数假设漫画类型需要每页记录数为5,当前页面为2,则SQL语句的结构如下:select*fromcartoonTypelimit(2-1)*5,5;任务实现一、完成数据访问层代码1、新增数据访问接口方法

在数据访问接口中,新增获取漫画类型总数(intgetTypeCount())、分页获取漫画类别(List<CartoonType>getPageTypeList(intpageNo,intpageSize))两个方法。任务实现一、完成数据访问层代码2、实现数据访问方法

在数据访问类(CartoonTypeDaoImpl)中,结合通用BaseDao,实现数据访问接口中新增的两个方法。其中,pageNo代表当前页码,pageSize代表每页的行数。任务实现二、完成业务逻辑层代码在业务逻辑接口(CartoonTypeBiz)中,新增获取漫画类型分页显示的总页数(intgetTypePageCount(intpageSize))、分页获取漫画类别(List<CartoonType>getPageTypeList(intpageNo,intpageSize))两个方法;并在业务逻辑类(CartoonTypeBizImpl)中,通过调用数据访问层的方法,实现这两个方法。任务实现三、设置漫画类型列表页面的分页显示

假设每页记录数pageSize的值为5,即每页显示5行;在Web根目录WebRoot下的adminpages/typeList.jsp页面中,获取URL参数pageNo,即当前页码。然后进行以下操作:拓展与提高在数据量较小的情况下,“假”分页效率比较高,实现起来也比较简单。步骤如下:1、在数据访问层和业务逻辑层添加获取所有数据的方法(在5.1中已经实现)。2、在JSP页面中,通过调用业务逻辑层的方法一次性获取所有数据。3、在JSP页面中,计算总页数,并在获取URL参数pageNo后,对其进行边界控制。4、根据当前页码和每页行数,通过List集合的subList()方法获取当前页的数据列表。5、显示当前页的数据列表,并添加换页超链接。总结

分页技术简介

分页的实现思路

谢谢大家观看

5.3任务3:基于MVC实现漫画信息的添加任务描述运用MVC和三层架构,在新增漫画之前进行存在性验证,并进行相应的提示,进而完成漫画的添加功能,同时完成漫画图片的上传。任务描述技能目标用Commons-FileUpload组件实现文件上传用Commons-FileUpload组件控制文件上传技能目标5.3.1用Commons-FileUpload组件实现文件上传一、Commons-FileUpload组件简介Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目。1、Commons-FileUpload组件的特点

使用简单,可以方便地嵌入JSP文件中,而且代码量较小;

能够全程控制上传内容;

能够限定上传文件的大小和类型。2、获取Commons-FileUpload组件的方式Commons-FileUpload组件依赖于Commons-IO组件,因此,必须同时导入这个两个组件,才能实现文件上传功能。5.3.1用Commons-FileUpload组件实现文件上传二、Commons-FileUpload组件的APICommons-FileUpload组件提供的接口和类,都具备了文件上传的相关功能,如获得所有上传文件的信息,包括名称、类型、大小等。1、ServletFileUpload类ServletFileUpload类用于实现文件的上传操作.5.3.1用Commons-FileUpload组件实现文件上传2、FileItem接口FileItem接口用于封装单个表单元素的数据,一个表单元素对应一个FileItem实例,在应用程序中使用的是其实现类DiskFileItem。5.3.1用Commons-FileUpload组件实现文件上传3、FileltemFactory接口与实现类创建ServletFileUpload实例需要依赖FileltemFactory工厂接口。DiskFileltemFactory是FileltemFactory接口的实现类。5.3.1用Commons-FileUpload组件实现文件上传三、Commons-FileUpload组件的应用使用Commons-FileUpload组件实现文件上传的功能。关键步骤可以总结如下:在项目中引入commons-fileupload-xx.jar和commons-io-xx.jar文件;设置表单的enctype属性为“multipart/form-data”;设置表单的method属性为“post”(不能为“get”);添加类型(type)为file的input元素;在JSP或Servlet文件中导入Commons-FileUpload组件所需的类;判断请求信息中的内容是否是multipart类型,如果是则进行处理;通过FileltemFactory工厂对象实例化ServletFileUpload对象;调用ServletFileUpload对象的parseRequest()方法将表单中元素解析成Fileltem对象的集合;通过迭代或者遍历依次处理每个Fileltem对象,如果是普通字段,通过getString()方法得到相应表单元素的值,该值与表单元素中的"name"属性对应;如果是文件元素,则通过File类的构造方法构建一个指定路径名和文件名的文件,并通过Fileltem对象的write()方法将上传文件的内容保存到该文件中。5.3.1用Commons-FileUpload组件实现文件上传三、Commons-FileUpload组件的应用5.3.1用Commons-FileUpload组件实现文件上传三、Commons-FileUpload组件的应用5.3.2用Commons-FileUpload组件控制文件上传一、控制上传文件的类型可以用Arrays类的asList()方法创建固定长度的集合,即允许文件类型的集合;然后通过集合的contains()方法匹配上传文件的扩展名来判断文件类型是否在允许范围内。可以

添加如下代码,完成文件类型的控制。List<String>fileType=Arrays.asList("gif","bmp","jpg");Stringext=fileName.substring(fileName.lastIndexOf(".")+1);if(!fileType.contains(ext)){//判断文件类型是否在允许范围内

out.print("上传失败,文件类型只能是gif、bmp、jpg");}else{//上传文件}5.3.2用Commons-FileUpload组件控制文件上传二、控制上传文件的大小可以通过ServletFileUpload类的setSizeMax(longsizeMax)方法限制文件的大小,关键代码如下:ServletFileUploadupload=newServletFileUpload(factory);//设置一个完整请求的最大限制upload.setSizeMax(1024*30);try{//……省略上传代码}catch(FileUploadBase.SizeLimitExceededExceptionex){out.print("上传失败,文件太大,全部文件的最大限制是:"+upload.getSize

温馨提示

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

评论

0/150

提交评论