资源描述
单击此处编辑母版文本样式,第二级,第三级,*,IC-MSP V1.0,单击此处编辑母版文本样式,第二级,第三级,*,IC-MSP V1.0,单击此处编辑母版文本样式,第二级,第三级,*,第六章,MVC,框架,Internet,应用解决方案,目标,MVC,模式及其特点,MVC,的模式,2,介绍当今流行的,MVC,框架,什么是,MVC,MVC,架构是随着,smalltalk,language,语言的发展提出的,它是一个著名的用户界面设计架构。,MVC,模式不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。,什么是,MVC,M,odel,(模型)模型包含应用程序的核心功能,管理这个模块中所用到的数据和值,V,iew,(视图)视图提供模型的表示,管理模块如何显示给用户,它是应用程序的外观,C,ontroller,(控制器)控制器对用户的输入作出反应,管理用户与视图发生的交互,MVC,尽管,MVC,设计模式很早就提出,但在,Web,项目的开发中引入,MVC,却是步履维艰。主要原因:,在早期的,Web,项目的开发中,程序语言和,HTML,的分离一直难以实现,脚本语言的功能相对较弱,缺乏支持,MVC,设计模式的一些必要的技术基础,MVC,模式的好处,视图与模型分离,使程序结构清晰,不同功能模块耦合度降低,各司其职,互不干涉,可以方便改变视图而模型不变,或者保持视图不变而改变业务规则,有利于开发中的分工。,多个视图共享一个模型,提高了代码复用。,控制器提高了应用的灵活性和可配置性。,JSP+JavaBean,模式,Model1,的主要特点,表现层用,HTML,或,JSP,。,JSP,文件还负责所有的业务和处理逻辑,JSP,直接用代码访问数据或,JSP,通过,JavaBean,存取数据。,以页面为中心,应用程序的业务逻辑和程序流程都在页面中出现。,Model1,的缺点,JSP,不仅负责表示逻辑,还负责控制逻辑,大型项目中如果采取此方式,每个开发小组协调困难,当输出设备不同时(比如股票信息输出到显示器、手机、,PDA,上),需要采用不同的输出格式,(,即不同的视图,),,那么用此方式,JSP,不仅要判定设备的类型,而且要为不同类型的设备提供正确的显示格式。,JSP+JavaBean+Servlet,模式,在一个典型的,J2EE Web,应用中,,MVC,设计模式包括三个部分:,模型(,Model,),:,用于封装数据及数据的处理,一般是关系数据库或,EJB,。,视图(,View,),:,数据的表现组件,通常就是,JSP,页面,也可以是,GUI,,,可以有多个。,控制器(,Controller,),:,接受用户动作,负责统一管理。一般是,Servlet,。,J2ee,的,MVC,模式,主流,MVC,框架介绍,Struts,:,控制组件,动作组件,FormBean,JavaBean,JSP,文件,1.Http,请求,2.,创建,FormBean,3.,调用动作类,4.,创建,JaveBean,对象,5.,转发到,JSP,6.,生成,Http,响应,控制器,模型,视图,主流,MVC,框架介绍,WebWork,WebWork,是由,OpenSymphony,组织开发的,致力于组件化和代码重用的拉出式,MVC,模式,J2EE Web,框架。,JSF,JavaServerFaces(JSF,),就是一个基于,JAVA,技术的,Web,应用框架标准,同时也是对于,J2EE,标准的一个重大补充,Servlet,Internet,应用解决方案,Servlet,概述,Servlet,模型的设计目的:,它能接收客户端发送的,HTTP,请求,,这个请求包含了客户端所有需要服务器知道的信息,,根据请求的类型选择一个特定的,Servlet,方法处理该请求,并有效地向客户端返回响应。,Serlvet,是在,Web,服务器上运行的,Java,小程序。,Servlet,的特点,Java,语言编写的类,服务器端小应用程序,与,Applet,对应,根据用户请求,产生动态页面,执行效率高,速度快;,使用标准的,API,,多种,Web Server,均支持;,可移植性:与操作系统和服务器平台无关;,功能强大:能够访问,JDK,平台的所有资源,安全性高:,Servlet,本身的,API,和容器保证安全,Servlet,的用途,协调输出,但几乎不参与生成动态页面的工作。,收集和验证用户输入,但几乎不作实际处理。,处理简单的业务逻辑。,(,以便于维护,),处理,JSP,不便处理的后台服务。,Servlet,的,API,javax.servlet,包和,javax.servlet.http,包提供编写,servlet,所需的类和接口。,所有,servlets,必须实现接口,javax.servlet.Servlet,在该接口中定义了,Servlet,生命周期的各种方法。,可通过继承,javax.servlet.GenericServlet,创建一个与协议无关的一般的,Servlet,通过继承,javax.servlet.http.HttpServlet,创建基于,HTTP,协议的,servlet,。,HTTP,到,Servlet,的方法映射,HTTP,的请求,HttpServlet,类的方法,Get,请求,doGet,(),Post,请求,doPost,(),Java,Serlvet,规范,2.3,作了如下规定:,HTML,中,.,Servlet,的执行过程,Servlet,在,Web,容器上,(,比如,Tomcat),上运行,客户机,Web,服务器,Servlet,引擎,HTTP,Request,HTTP,Response,HTTP,Request,HTTP,Response,HTTPServlet,Request,HTTPServlet,Response,HttpServlet,service(),应用程序,逻辑和生,成的内容,Servlet,的执行过程,Web,容器装载、运行并管理,Servlet,的一般过程如下:,客户向,Web,容器,(,如,Tomcat),发送,HTTP,请求,如果,Servlet,还没载入,容器就装入它。第一次装入之后,该,Servlet,就一直保留在内存中,直到容器决定把它卸载(通常是,Tomcat,停止运行,),Web,容器把,HTTP,请求信息送给,Servlet,,,给每一个用户请求创建一个新的线程。,Servlet,的执行过程,Servlet,把,HTTP,请求转换成,HttpServletRequest,(,该对象包含用户输入的数据或者请求参数,),处理该请求之后,生成一个相应的,HttpServletResponse,,,这两个对象传给,Servlet,的,service(),方法,由容器调用该方法,执行后将信息反馈到容器中。,容器把这些反馈信息回送到客户端浏览器。,Servlet,的生命周期,生命全过程:,加载,servlet,需要的类及,servlet,类本身,实例化,初始化,(init),处理请求,(,service,doGet,doPost,),退出服务,(destroy),Servlet,的生命周期,HttpServlet,中对应生命周期的方法,:,init(),public void,init,(,ServletConfig,config,)throws,ServletException,service(),public void,service,(,ServletRequest,req,ServletResponse,res)throws,ServletException,java.io.IOException,该方法根据,HTTP,请求,调用,doGet,(),或,doPost,(.),用于接收来自,Client,的请求、获取请求中的数据,编写响应的标题、获取响应的输出流以及编写响应的数据。,destroy(),public void,destroy,(),用于释放本,servlet,所占用的所有资源,如线程或数据库连接,并将数据保存到文件或者数据库中。,Client2,Servlet,的生命周期,init(),service(),service(),service(),service(),service(),service(),destroy(),service(),时,间,Client 1,Client 3,Servlet,的生命周期,Servlet,生命周期的顺序图,ServletRequest,在,HTTP,协议下,从客户请求传来的所有信息可通过请求字符串以,http,头以及请求体中的消息,从客户端传到服务器端。,在,HTTP,请求发送到服务器后,请求对象就被转换成,ServletRequest,对象了。,Servlet,容器还将创建一个相应的,ServletResponse,对象,向客户端所在的浏览器发送响应数据。,它们将被转换为相应的,HttpServletRequest,HttpServletResponse,对象,然后传给,Servlet,进行相应的请求处理,。,ServletRequest,getParameterNames,获取客户提交的表单中所有参数名的集合,getParameter,(ParamName,),获取参数名为,ParamName,的参数值,getParameterValues,(,ParamName,),获取参数名为,ParamName,的参数值的集合,getInputStream,(),得到一个输入流用来读取二进制数据,ServletResponse,常用方法:,setContentType,(text/,html;charset,=gb2312);,设置文档输出类型,ServletOutputStream,out=,response.,getOutputStream,();,获取字节形式的输出流,PrintWriter,out=,response.,getWriter,();,获取字符输出流,sendRedirect,(String,location),URL,重,定向,ServletRequest,Form,表单,(,first_servlet.html,),第一个,JSP,程序,First Name,:,Last Name,:,ServletRequest,Logon.java,public void,doPost(HttpServletRequest,request,HttpServletResponse,response),throws,ServletException,IOException,response.setContentType(text,/html;,charset,=,gb2312);,PrintWriter,out=,response.getWriter,();,String,UserName,=,request.getParameter,(,“FirstName,);,UserName,=new String(UserName.getBytes(ISO8859_1),GB2312);,out.println,();,out.println(,Hello,+UserName,);,out.println,();,out.close();,WEB,应用的结构,WEB,应用根目录,WEB-INF,web.xml,classes,training,servlet,SimpleServlet.class,lib,WEB,应用描述文件,simpleservlet,training.servlet.SimpleServlet,simpleservlet,/,simpleservlet,请求调度方法,将,HTTP,请求从一个,servlet,转发到另一个,servlet,或,jsp,的过程叫做,请求转发,(request dispatching),ServletRequest,接口提供了访问,RequestDispatcher,对象的方法:,RequestDispatcher,接口定义了一个从客户端接收请求,并能够把请求发送到任何服务器资源(比如,servlet,、,HTML,文件或者,JSP,文件)的对象。,请求调度方法,String,uri,=,ServletTwo,;,RequestDispatcher,rd=,request.getRequestDispatcher(uri,);,rd.forward(request,response,)/,方法将响应职责传递给另一个,Servlet,进行处理。,注意:必须在输出还未提交到客户端时才可以调用。,rd.include(request,response,)/,方法,:,包含其它的,Servlet,或静态资源。,Servlet架构图,总结,MVC,的概念,重点介绍了模式二及,Servlet,原理与实现,简单介绍了当今流行的框架,
展开阅读全文