MVC框架技术实现学员教材.docx
- 文档编号:11462452
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:36
- 大小:129.83KB
MVC框架技术实现学员教材.docx
《MVC框架技术实现学员教材.docx》由会员分享,可在线阅读,更多相关《MVC框架技术实现学员教材.docx(36页珍藏版)》请在冰豆网上搜索。
MVC框架技术实现学员教材
第一章Servlet
第一节JavaServlet概述
1、什么是Servlet
Servlet是标准的服务器端Java应用程序,它扩展了Web服务器的功能。
Servlet运行在一个Java环境中,即Java虚拟机,或JVM。
servlet将被载入到一个应用服务器中,例如WebSphere(tm)ApplicationServer。
由于Servlet是由一个用户的请求来调用,Servlet对应一个Web站点单一URL的系统响应。
一个企业级Web站点可能对一个请求就有多个Servlet,例如注册、购物和支付。
由于Servlet运行在服务器环境中,用户永远不会直接看到它们而且Servlet不需要图形的用户界面。
Servlet是Java组件,可以在系统需要它们时被载入。
使用Servlet生成的动态文本,比CGI脚本更容易,且运行效率更高,是CGI脚本的高效替代品。
ServletAPI的最大一个优点是协议的独立性,它不假定网络传输使用的协议、Servlet如何装载以及运行的服务器环境,这些特性使得ServletAPI可以方便的嵌入到许多不同种类的服务器中。
另外,它还具有可扩展、简单、短小、容易使用的特点。
2、Servlet的用途
一个简单的Servlet可以处理使用HTMLFORM在HTTP(S)上使用POST传递的数据,例如:
一个带有信用卡数据的定单。
复杂的Servlet可以用于实现定单输入和处理系统、生产及库存数据库、或者一个复杂的联机支付系统。
一个Servlet可以将请求传递给另一个服务器,这项技术在多个服务器中可以用来平衡装载相同的镜像内容。
或者,可以用于将一个逻辑服务划分给几个服务器,按照任务类型或组织的边界路由请求,实现负载均衡。
3、API的有效性
JavaServletAPI是一个标准的Java扩展API。
在J2EE中,它已经发展成为Java核心框架的一部分。
JavaSoft提供了一个包,可以用于在其他服务器中嵌入Servlet。
4、ServletAPI的特性
ServletAPI已经被大多数基于Java的Web服务器支持,因此,当使用ServletAPI时,可以继承Java的许多优点:
不但代码不存在内存漏洞和难以发现的指针bug,而且还可以运行在许多不同服务器提供商的平台上。
主要功能
Servlet采用常见的接受请求和生成响应的编程模型,该模型使用了一系列的分布式系统编程工具箱,这包括从远程过程调用到向Web服务器发出HTTP请求等。
Servlet编程非常简单,主要就是实现一个Servlet接口,例如:
PublicclassMyServletextendsGenericServlet
{
Publicvoidservice(ServletRequestrequest,ServletResponseresponse)
throwsServletException,IOException
{
……
}
}
Service方法内可以操作request和response参数,这里封装了客户机发送的数据,提供了对参数的访问,并允许Servlet报告各种状态。
通常Servlet通过输入流得到大多数参数,并使用输出流发送它们的响应。
ServletInputStreamin=request.getInputStream();
ServletOutputStreamout=request.getOutputStream();
环境状态
由于Servlet是一种Java对象,它们由特定的实例数据组成,这意味着正在执行的Servlet是运行在服务器内部的独立的应用程序。
在初始化期间,Servlet访问一些特定的Servlet配置数据,这允许相同Servlet类的不同实例可以用不同的数据来初始化,并当作不同名字的Servlet来管理。
在初始化期间提供的数据中,包括了每个实例将在哪里保存它们自己的状态。
Servlet还可以利用ServletContext对象与它们自己的环境进行交互。
使用模式
Servlet可以使用下面几种模式,然而,不是所有服务器环境都支持以下所有这些模式:
●基本的模式:
以请求/响应协议为核心。
●服务器可以用过滤链链接多个Servlet。
●Servlet可以支持特定的协议,例如HTTP。
●在基于HTTP的应用程序中,Servlet是一个基于CGI扩展的完全的替代品。
●在基于HTTP的应用程序中,Servlet还可以作为HTML的服务器端来包含动态的生成的Web文档。
主要方法
Servlet装载之后,其生命周期涉及三个主要方法:
◆init方法
Servlet通过调用init方法被服务器激活,如果开发者需要,可以执行一些内在的设置,这样,无需每个请求都设置一次。
◆service方法
当初始化后,Servlet处理许多请求,为每一个客户请求生成一个service调用,这些请求可能是并行的,这允许Servlet调整多个客户的行为,类的静态属性可以用于在请求中共享数据。
◆destroy方法
Servlet对象将一直处理请求,除非服务器调用destroy方法显示的关闭Servlet,Servlet类还是一个合格的垃圾收集器。
安全特性
与当前任何其他的服务器扩展API不同,JavaServlet提供了强大的安全策略支持。
这是因为所有的Java环境都提供了一个安全管理器,可以用于控制是否允许执行某项操作,例如网络或文件的访问。
缺省的,通过网络装载的所有Servlet都是不可信的,它不允许执行诸如访问网络服务或本地文件的操作。
仅仅在JavaWebServer中创建的,或者在本地由服务器管理员控制的…/Servlet目录的Servlet,才是完全可信的,并赋予所有的权限。
性能特性
Servlet最突出的特性之一就是对于每一个请求不需要象CGI那样单独创建一个新的进程。
在大多数环境中,许多Servlet可以并行运行在与服务器相同的进程中,处理许多已初始化的客户请求,这些初始化的开销由许多方法分担,对于该service方法所面对的所有客户请求,它们都有机会共享数据和通讯资源,并充分利用系统缓存。
Servlet的生命周期
Servlet部署在容器里,它的生命周期由容器管理。
Servlet的生命周期概括为以下几个阶段:
◆装载Servlet:
这项操作一般是动态执行的。
有些服务器提供了相应的管理功能,可以在启动的时候就装载Servlet并能够初始化特定的Servlet。
◆创建一个Servlet实例。
◆调用Servlet的init()方法。
◆服务:
如果容器接收到对此Servlet的请求,那么它将调用Servet的service()方法。
◆销毁:
实例被销毁,通过调用Servlet的destroy()方法来销毁Servlet。
在几个阶段中,对外提供服务是最重要的阶段,service()方法是我们最关心的方法,因为它才是真正处理业务的方法。
Servlet为客户端提供服务,如下图所示:
第二节Servlet编程示例
在进行具体Servlet编程之前,这里,先举一个最简单的Servlet程序,熟悉一下Servlet的结构。
源程序:
HelloWorld.java
packagecom.iss.test;
importjava.io.*
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHelloWorldServletextendsHttpServlet
{
//Initializeglobalvariables
publicvoidinit()
throwsServletException
{
}
//ProcesstheHTTPGetrequest
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{
response.setContentType("text/html;charset=gb2312");
PrintWriterout=response.getWriter();
out.println(“”);
out.println(“
”);out.println(“
out.println(“”);
out.println(“
”);out.println(“Hello,World!
”);
out.println(“”);
out.println(“”);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException
{
doGet(request,response);
}
//Cleanupresources
publicvoiddestroy()
{
}
}
编译
使用任何一种编译工具,编译为class文件。
比如jdk自带的javac命令:
JavacHelloWorld.java
打包
使用任何一种打包工具,打成可发布的jar包或web组件包。
部署
将打包好的程序发布到任何支持Servlet容器的服务器上去。
这个servlet对应的部署描述符如下:
(位于WEB-INF下的web.xml中)
xmlversion=”1.0”encoding=”ISO-8859-1”?
>
xmlns: xsi=”http: //www.w3.org/2001/XMLSchema-instance” xsi: schemaLocation=”web-app_2_4.xsd” version=”2.4”> HelloWorldServlet 运行 从客户端访问服务器上的应用,比如通过浏览器访问,服务器给客户端返回“Hello,world! ”的信息。 第三节Servlet相关类和接口 HttpServlet类 一个抽象类,可以从该类派生出一个子类来实现一个HttpServlet,接受来自Web站点的请求,并将处理后的响应结果发回Web站点。 在HttpServlet的子类中,必须至少重载下表中所列的其中一种方法。 HttpServlet子类通常重载的方法 方法名 用途 doGet 如果Servlet支持HTTPGET请求,用于HTTPGET请求 doPost 如果Servlet支持HTTPPOST请求,用于HTTPPOST请求 doPut 如果Servlet支持HTTPPUT请求,用于HTTPPUT请求 doDelete 如果Servlet支持HTTPDELETE请求,用于HTTPDELETE请求 init和destroy 如果需要管理Servlet生命周期内所持有资源,可以重载这两个方法 通常,不重载service方法,对于上表中的每一种HTTP请求,service方法通过分派它们到相应的Handle线程(doXXX方法)来处理这些标准的HTTP请求。 通常也不重载doOptions和doTrace方法,service方法通过分派它们到doTrace和doOptions来支持HTTP1.1TRACE和OPTIONS。 Servlet通常运行在多线程的服务器中,因此,所编写的Servlet代码必须能够处理并行请求和对数据资源的同步访问。 doGet protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException 用于获取服务器信息,并将其作为响应返回给客户端。 当经由web浏览器,或者通过HTML、Jsp直接访问Servlet的URL时,一般使用Get调用。 doPost protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException 用于客户端把数据传送到服务器端。 使用它的好处是可以隐藏发送给服务器的任何数据。 适合于发送大量的数据。 doPut protectedvoiddoPut(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException Put的调用和Post相似,它允许客户端把真正的文件存放在服务器上,而不仅仅是传送数据。 doDelete protectedvoiddoDelete(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException 它的调用和Post相似,它允许客户端删除服务器端的文件或者web页面。 doTrace protectedvoiddoTrace(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException 由容器调用以使此Servlet能够处理Trace请求。 这个方法主要用于测试,它是不可以覆盖的方法。 doHead protectedvoiddoHead(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException 它用于处理客户端的Head调用,并且返回一个response。 当客户端只需要知道响应的Header时,它就发出一个Header请求。 doOptions protectedvoiddoOptions(HttpServletRequestreq,HttpServletResponseresp) throwsServletException,IOException 它用于处理客户端的Options调用,通过这个调用,客户端可以获得此Servlet支持的方法。 HttpServletRequest接口 该接口扩展了javax.servlet.servletRequest接口,用于提供更多的功能给HttpServlet。 Servlet引擎实现该接口,创建HttpServletRequest对象,将来自客户浏览器的信息传递给HttpServlet的service方法。 getDateHeader publiclonggetDateHeader(Stringname) 得到一个特定请求的header的、描述Date对象的长整形值。 Header是大小写敏感的。 如果请求中没有该name的header,则方法返回-1,如果方法不能转换日期,则抛IllegalArgumentException异常。 getHeader publicStringgetHeader(Stringname) 得到有关请求header的值,为一个字符串,如果指定名字的header没有随请求一起发送,该方法返回null,name是大小写敏感的。 getCookies publicCookie[]getCookies() 得到一个Cookie对象数组,含有所有发送请求的浏览器的Cookie,如果浏览器没有发送任何Cookie,则返回null。 getHeaderNames publicEnumerationgetHeaderNames() 得到请求中的所有header名。 getRequestURI publicStringgetRequestURI() 得到HTTP请求的第一行中从协议名到查询字符串之间的URL部分。 getSession publicHttpSessiongetSession(Booleancreate) publicHttpSessiongetSession() 得到与请求相联系的当前HttpSession,如果需要,则为请求创建一个新的任务。 HttpServletResponse接口 该接口扩展了OutputStream类,因此,可以使用OutputStream类中声明的方法,例如,getOutputStream()方法。 addCookie publicvoidaddCookie(Cookiecookie) 增加指定的cookie到响应。 setHeader publicvoidsetHeader(Stringname,Stringvalue) 使用给定的名字和值设置响应头。 ServletConfig接口 该接口定义了一个Servlet配置对象,Servlet引擎可以用来传递信息给Servlet以便初始化Servlet。 配置信息含有初始化参数,这些参数以“名字/值”的形式成对出现,描述关于服务器的Servlet信息。 getServletContext publicServletContextgetServletContext() 得到服务器传递给Servlet的一个ServletContext对象。 getInitParameter publicStringgetInitParameter(Stringname) 得到一个含有参数name指定的初始化参数的值,如果参数不存在则为null。 getInitParameterNames publicEnumerationgetInitParameterNames() 得到Servlet的初始化参数的名字,返回值是一个Enumeration对象。 ServletContext接口 该接口定义了一套Servlet与Servlet引擎通信的方法,例如: 得到MIME类型的文件、确定运行在服务器上的其他Servlet或写Servlet日志文件。 Servlet引擎通过返回一个ServetContext对象来与Servlet交流,Servlet使用ServletConfig接口的getServletContext方法得到ServletContext对象。 getContext publicServletContextgetContext(Stringuripath) 得到服务器上特定URL的一个ServletContext对象,该方法允许Servlet访问特定URL上的资源,并得到来自该URL的RequestDispatcher对象。 getMimeType publicStringgetMimeType(Stringfile) 得到指定文件的MIME类型,如果不知道MIMI类型则为null。 MIMI类型由Servlet引擎的配置决定,MIME类通常为“text/html”和“image/gif”。 getRealPath publicStringgetRealPath(Stringpath) 得到参数path中对应于虚拟路径的真实路径。 虚拟路径含有一个Servlet名,后跟Servlet文件名。 getServerInfo publicStringgetServerInfo() 得到正在允许的Servlet引擎的名字和版本。 getAttribute publicObjectgetAttribute(Stringname) 得到Servlet引擎的参数name所指定的属性。 getAttributeNames publicEnumerationgetAttributeNames() 得到一个含有属性名的Enumeration对象,这些属性在Servlet上下文中有效。 setAttribute publicvoidsetAttribute(Stringname,Objectobject) 设置Servlet上下文中属性的名字,如果指定的名字name已使用,该方法将覆盖老的名字,并将名字捆绑到新的属性中。 removeAttribute publicvoidremoveAttribute(Stringname) 从Servlet上下文中移走给定名字name的属性名。 ServletInputStream类 该类是一个抽象类,它提供了从客户机请求读取二进制数据的一个输入流,对于一些协议,例如HTTPPOST和PUT,可以使用ServletInputStream对象读取和发送数据。 readLine publicintreadLine(byte[]b,intoff,intlen)throwsIOException 读输入流,一次一行。 如果读到输入流的尾部,则返回-1。 ServletOutputStream类 该类是一个抽象类,它提供了一个输入流,用于向客户机发送数据。 print publicvoidprint(Strings)throwsIOException publicvoidprint(booleanb)throwsIOException publicvoidprint(charc)throwsIOException publicvoidprint(inti)throwsIOException publicvoidprint(longl)throwsIOException publicvoidpr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MVC 框架 技术 实现 学员 教材