《internet应用解决方案-mvc框架(servlet)》由会员分享,可在线阅读,更多相关《internet应用解决方案-mvc框架(servlet)(37页珍藏版)》请在金锄头文库上搜索。
1、第六章,MVC框架,Internet应用解决方案,目标,MVC模式及其特点 MVC的模式2 介绍当今流行的MVC框架,什么是MVC,MVC架构是随着smalltalk language语言的发展提出的,它是一个著名的用户界面设计架构。 MVC模式不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。,什么是MVC,Model(模型) 模型包含应用程序的核心功能,管理这个模块中所用到的数据和值 View(视图) 视图提供模型的表示,管理模块如何显示给用户,它是应用程序的外观 Controller(控制器) 控制器对用户的输入作出反应,管理用户与
2、视图发生的交互,MVC,尽管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。主要原因: 在早期的Web项目的开发中,程序语言和HTML的分离一直难以实现 脚本语言的功能相对较弱,缺乏支持MVC设计模式的一些必要的技术基础,MVC模式的好处,视图与模型分离,使程序结构清晰,不同功能模块耦合度降低,各司其职,互不干涉 ,可以方便改变视图而模型不变,或者保持视图不变而改变业务规则,有利于开发中的分工 。 多个视图共享一个模型,提高了代码复用。 控制器提高了应用的灵活性和可配置性。,JSP+JavaBean模式,Model1的主要特点,表现层用HTML或JSP。 JSP文件还负
3、责所有的业务和处理逻辑 JSP直接用代码访问数据或JSP通过JavaBean存取数据。 以页面为中心,应用程序的业务逻辑和程序流程都在页面中出现。,Model1的缺点,JSP不仅负责表示逻辑,还负责控制逻辑 大型项目中如果采取此方式,每个开发小组协调困难 当输出设备不同时(比如股票信息输出到显示器、手机、PDA上),需要采用不同的输出格式(即不同的视图),那么用此方式JSP不仅要判定设备的类型,而且要为不同类型的设备提供正确的显示格式。,JSP+JavaBean+Servlet模式,在一个典型的J2EE Web应用中,MVC设计模式包括三个部分: 模型(Model): 用于封装数据及数据的处理
4、,一般是关系数据库或EJB。 视图(View): 数据的表现组件,通常就是JSP页面,也可以是GUI,可以有多个。 控制器(Controller): 接受用户动作,负责统一管理。一般是Servlet。,J2ee的MVC模式,主流MVC框架介绍,Struts:,主流MVC框架介绍,WebWork WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。 JSF JavaServerFaces(JSF)就是一个基于JAVA技术的Web应用框架标准,同时也是对于J2EE标准的一个重大补充,Servlet,Internet应用解决方案,Ser
5、vlet概述,Servlet模型的设计目的: 它能接收客户端发送的HTTP请求,这个请求包含了客户端所有需要服务器知道的信息,根据请求的类型选择一个特定的Servlet方法处理该请求, 并有效地向客户端返回响应。 Serlvet是在Web服务器上运行的Java小程序。,Servlet的特点,Java语言编写的类 服务器端小应用程序,与Applet对应 根据用户请求,产生动态页面 执行效率高,速度快; 使用标准的API,多种Web Server均支持; 可移植性:与操作系统和服务器平台无关; 功能强大:能够访问JDK平台的所有资源 安全性高:Servlet本身的API和容器保证安全,Servle
6、t的用途,协调输出,但几乎不参与生成动态页面的工作。 收集和验证用户输入,但几乎不作实际处理。 处理简单的业务逻辑。(以便于维护) 处理JSP不便处理的后台服务。,Servlet的API,javax.servlet包和javax.servlet.http包提供编写servlet所需的类和接口。 所有servlets必须实现接口javax.servlet.Servlet,在该接口中定义了Servlet生命周期的各种方法。 可通过继承javax.servlet.GenericServlet创建一个与协议无关的一般的Servlet 通过继承javax.servlet.http.HttpServlet
7、创建基于HTTP协议的servlet。,HTTP到Servlet的方法映射,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的
8、一般过程如下: 客户向Web容器(如Tomcat)发送HTTP请求 如果Servlet还没载入,容器就装入它。第一次装入之后,该Servlet就一直保留在内存中,直到容器决定把它卸载(通常是Tomcat停止运行) Web容器把HTTP请求信息送给Servlet,给每一个用户请求创建一个新的线程。,Servlet的执行过程,Servlet把HTTP请求转换成HttpServletRequest(该对象包含用户输入的数据或者请求参数),处理该请求之后,生成一个相应的HttpServletResponse,这两个对象传给Servlet的service()方法,由容器调用该方法,执行后将信息反馈到容器
9、中。 容器把这些反馈信息回送到客户端浏览器。,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)
10、throws ServletException, java.io.IOException 该方法根据HTTP请求,调用doGet()或doPost(.) 用于接收来自Client的请求、获取请求中的数据,编写响应的标题、获取响应的输出流以及编写响应的数据。 destroy() public void destroy() 用于释放本servlet所占用的所有资源,如线程或数据库连接,并将数据保存到文件或者数据库中。,Servlet的生命周期,init ( ),service ( ),service ( ),service ( ),service ( ),service ( ),service (
11、 ),destroy ( ),service ( ),时 间,Servlet的生命周期,Servlet生命周期的顺序图,ServletRequest,在HTTP协议下,从客户请求传来的所有信息可通过请求字符串以http头以及请求体中的消息,从客户端传到服务器端。 在HTTP请求发送到服务器后,请求对象就被转换成ServletRequest对象了。Servlet容器还将创建一个相应的ServletResponse对象,向客户端所在的浏览器发送响应数据。 它们将被转换为相应的HttpServletRequest, HttpServletResponse对象,然后传给Servlet进行相应的请求处理
12、。,ServletRequest,getParameterNames 获取客户提交的表单中所有参数名的集合 getParameter(ParamName) 获取参数名为ParamName的参数值 getParameterValues (ParamName) 获取参数名为ParamName的参数值的集合 getInputStream() 得到一个输入流用来读取二进制数据,ServletResponse,常用方法: setContentType(“ text/html;charset=gb2312 “); 设置文档输出类型 ServletOutputStream out=response.getO
13、utputStream(); 获取字节形式的输出流 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 Ser
14、vletException, 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(“ “)
15、; 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对象的方法
16、: 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原理与实现 简单介绍了当今流行的框架,