第二章servlet创建及生命周期_第1页
第二章servlet创建及生命周期_第2页
第二章servlet创建及生命周期_第3页
第二章servlet创建及生命周期_第4页
第二章servlet创建及生命周期_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

第二章Servlet创建及生命周期回顾WEB应用程序B/S架构与C/S架构HTTP协议Servlet是一种服务器端的Java应用程序Tomcat服务器的安装与配置Servlet的部署与访问

目标Servlet的创建详解Servlet的配置详解Servlet的生命周期Servlet框架Servlet框架两个包:javax.servletjavax.servlet.http一个接口:javax.servlet.Servlet两个类javax.servlet.GenericServletjavax.servlet.http.HttpServletServlet

接口及其实现类的类框图Servlet框架开发一个servlet,有三种方法实现javax.servlet.Servlet接口继承javax.servlet.GenericServlet继承javax.servlet.http.HttpServlet随着发展,开发的方法,越来越简单。使用myeclipse自动创建servlet非常容易,但是隐藏了太多的实现细节。实现Servlet接口publicclassFirstServletimplementsServlet{ publicvoiddestroy(){ } publicServletConfiggetServletConfig(){ returnnull; } publicStringgetServletInfo(){ returnnull; } publicvoidinit(ServletConfigconfig)throwsServletException{ } publicvoidservice(ServletRequestrequest,ServletResponseresponse) throwsServletException,IOException{ }}实现Servlet接口<servlet><servlet-name>FirstServlet</servlet-name><servlet-class>com.ch02.servlet.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/firstservlet</url-pattern></servlet-mapping>实现Servlet接口javax.servlet.Servlet接口是Servlet的顶层接口声明5个方法init():该函数用于初始化该servlet(有点类似于类的构造函数),它只会被调用一次(当用户第一次访问该servlet的时候被调用)getServletConfig():获取servlet的配置信息service():这个函数用于处理业务逻辑,程序员应该把业务逻辑代码写在这里。和init不同,用户每访问一次该servlet时,都会被调用,两个参数

ServletRequest:用于获得客户端(浏览器)的信息。

ServletResponse:用于想客户端(浏览器)返回信息。

返回:首先从ServletResponse中得到printWriter输出流destroy():销毁servlet实例(释放内存)getServletInfo():它提供有关servlet的信息

Servlet生命周期观察Servlet接口的方法也反映了Servlet的生命周期Servlet的生命周期:加载阶段:加载并实例化(创建servlet实例)初始化阶段:

调用init()方法响应客户请求阶段:调用service()方法,一般业务逻辑在这里处理,该方法在访问该servlet时,会被调用终止阶段:调用destroy()方法Servlet生命周期修改FirstServletpublicclassFirstServletimplementsServlet{ publicvoiddestroy(){ System.out.println("调用destroy()方法"); } publicvoidinit(ServletConfigconfig)throwsServletException{ System.out.println("调用init(ServletConfigconfig)方法"); } publicvoidservice(ServletRequestrequest,ServletResponseresponse) throwsServletException,IOException{ System.out.println("调用service(ServletRequestrequest,ServletResponseresponse)"); } …其他代码略}加载并实例化一个ServletServlet容器加载和实例化ServletServlet容器可以从本地文件系统、远程文件系统或其他网络服务中通过类加载器加载ServletServlet容器调用Servlet默认构造方法(不带参的构造方法)初始化阶段——init()方法时机:由服务器启动,加载Servlet时调用作用:让Servlet对象在处理客户请求前完成一些初始化的工作特点:只调用一次除非它被destroy()方法移除,否则不能重复调用一旦调用成功,则servlet可以接受客户端请求语法:publicvoidinit(ServletConfigconfig)throwsServletExceptionService()方法时机:第一次访问Servlet:必须在inint()方法执行之后客户端发送请求语法:protectedvoidservice(HttpServletRequestreq,

HttpServletResponseresp)throwsServletException,IOException{}特点:通过独立的servlet线程处理客户端请求存在并发问题destroy()方法时机:当一个服务器卸载servlet时会自动调用作用:释放当前实例所占用的资源把当前内存中的数据储存到持久存储设备中在整个生命周期中,只被调用一次语法:注意:在destroy()方法完成前必须确保所有线程都已完成publicvoiddestroy(){}Init()参数

—ServletConfig对象作用:封装了Servlet容器的配置信息特点:从一个Servlet被实例化后,对任何客户端任何时候访问有效仅对本servlet有效,不能访问另一个servlet的ServletConfig方法:getInitParameter()配置初始化参数初始化参数在web.xml中定义语法:注意:必须写在<servlet></serlvet>之间必须写在<serlvet-name>和<serlvet-class>之后<init-param><param-name>adminusername</param-name><param-value>sa</param-value></init-param><init-param><param-name>adminpassword</param-name><param-value>123456</param-value></init-param><servlet><servlet-name>InitServlet</servlet-name><servlet-class>com.ch02.servlet.InitServlet</servlet-class><init-param><param-name>adminusername</param-name><param-value>sa</param-value></init-param><init-param><param-name>adminpassword</param-name><param-value>123456</param-value></init-param></servlet>初始化方法示例publicclassInitServletimplementsServlet{

privateServletConfigconfig; publicvoidinit(ServletConfigconfig)throwsServletException{

this.config=config; } publicvoidservice(ServletRequestreq,ServletResponseres) throwsServletException,IOException{ Stringadminusername=config.getInitParameter("adminusername"); Stringadminpassword=config.getInitParameter("adminpassword"); System.out.println(adminusername+"="+adminpassword); }…其他代码略}初始化方法示例GenericServlet类GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。

servletAPI提供了Servlet接口的直接实现,称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。

除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet上下文,提供对授权传递到init()方法中的ServletConfig对象的方法。GenericServlet类GenericServlet类中的一些方法

StringgetInitParameter(Stringname)返回具有指定名称的初始化参数值。通过凋用config.getInitParameter(name)实现。

ServletConfiggetServletConfig()返回传递到init()方法的ServletConfig对象

ServletContextgetServletContext()返回在config对象中引用的ServletContextabstractvoidservice(Requestrequest,Responseresponse)throwsServletException,IOException由servlet引擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方法。

publicclassSecondServletextendsGenericServlet{@Overridepublicvoidservice(ServletRequestarg0,ServletResponsearg1) throwsServletException,IOException{Stringadminusername=this.getInitParameter("adminusername");ServletConfigconfig=this.getServletConfig();Stringadminpassword=config.getInitParameter("adminpassword");System.out.println(adminusername+"="+adminpassword);}}GenericServlet类示例<servlet><servlet-name>SecondServlet</servlet-name><servlet-class>com.ch02.servlet.SecondServlet</servlet-class><init-param><param-name>adminusername</param-name><param-value>sa</param-value></init-param><init-param><param-name>adminpassword</param-name><param-value>123456</param-value></init-param></servlet>GenericServlet类示例HttpServlet类虽然servletAPI允许扩展到其它协议,但最终所有的servlet均在Web环境下实施操作,只有几种servlet直接扩展了GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet。

HttpServlet类通过调用指定到HTTP请求方法的方法实现service(),亦即对DELETE、HEAD、GET、OPTIONS、POST、PUT和TRACE,分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,将请求和响应对象置入其HTTP指定子类。

通过HttpServlet去开发servlet,需要重写doGet、doPost方法,这是目前用的最多的一种方法。publicclassThirdServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

…部分代码略

}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doPost(request,response);}}HttpServlet类示例Servlet的配置详解一个servlet可以对应多个mapping<servlet><servlet-name>HelloWorldServlet</servlet-name><servlet-class>com.servlet.ch01.HelloWorldServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloWorldServlet</servlet-name><url-pattern>/helloworld</url-pattern></servlet-mapping><servlet-mapping><servlet-name>HelloWorldServlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>Servlet的配置详解Servlet映射的URL中可以使用*通配符但只能有两种格式:一种是“*.扩展名”<servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>*.servlet</url-pattern></servlet-mapping>一种是以斜杠/开头,以/*结尾<servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/servlet/*</url-pattern></servlet-mapping>@WebServlet用于将一个类声明为Servlet@W

温馨提示

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

评论

0/150

提交评论