Servlet 生命周期

一、实现重写servlet

  创建一个类,实现 servlet 这个接口时,需要实现里面的抽象方法。

 import javax.servlet.*;
import java.io.IOException; public class ServletDemo implements Servlet {
public ServletDemo() {
System.out.println("1、构造器方法");
}
/**
* 初始化方法,在servlet被创建时,执行,只会执行一次
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException
System.out.println("2、初始化方法init...");
} /**
* 获取servletconfig对象
* servletConfig:servlet的配置对象
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
} /**
* service:提供服务方法,专门用来处理请求和响应的
* 每一次servlet被访问时,执行,执行多次
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3、服务方法service...");
} /**
* 获取servlet的一些信息,如版本,作者等。。
* @return
*/
@Override
public String getServletInfo() {
return null;
} /**
* 销毁方法
* 在服务器正常关闭时,在servlet被杀死时,被执行,只执行一次
*/
@Override
public void destroy() {
System.out.println("4、销毁方法destory...");
}
}

二、生命周期

  1、被创建时期

    执行 Servlet 构造器方法,一般是在第一次访问 Servlet时,由Web容器(Tomcat)来创建 Servlet。

    Servlet什么时候被创建?

      默认情况下,Servlet 第一次被访问,Servlet 被 Web 容器创建。

    可以配置 Servlet 的创建时机

      在 web.xml 中 <servlet> 标签下配置 <load-on-startup>,默认值为 -1。

      ① 第一次访问时,创建,设置 <load-on-startup>的值为负数

      ② 在服务器启动时,创建,设置<load-on-startup>的值为0或正整数

1  <!--配置servlet-->
2 <servlet>
3 <!--servlet名称-->
4 <servlet-name>demo1</servlet-name>
5 <!--servlet全类名-->
6 <servlet-class>cn.ks.web.servlet.ServletDemo1</servlet-class>
7 <!-- 创建时机-->
8 <load-on-startup>5</load-on-startup>
9 </servlet>

  2、初始化时期

     当类被创建后,立刻执行 init() 初始化方法,只执行一次。

    Servlet的 init() 方法,只执行一次(一般用来加载资源),说明一个Servlet在内存中只存在一个对象,Servlet是单例的

     a、多个用户同时访问时,可能存在线程安全问题。

     b、解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

  3、服务时期

    该时期执行 service() 方法来提供服务,这个方法可以执行多次。每次访问 servlet 时,Service 方法都会被调用一次。

  4、销毁时期

    被销毁时,执行 destory() 方法,只执行一次

      ① Servlet被销毁时执行。服务器关闭时,Servlet被销毁

      ② 只有服务器正常关闭时,才会执行destroy方法。

      ③ destroy方法在Servlet被销毁之前执行,一般用于释放资源  

  

Java 之 Servlet中的生命周期的更多相关文章

  1. java Web servlet简介及其生命周期

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...

  2. Java Web学习总结(9)——servlet和Jsp生命周期解读

    一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...

  3. Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  4. Java对象在JVM中的生命周期

          当你通过new语句创建一个java对象时,JVM就会为这个对象分配一块内存空间,只要这个对象被引用变量引用了,那么这个对象就会一直驻留在内存中,否则,它就会结束生命周期,JVM会在合适的时 ...

  5. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  6. servlet简介及生命周期

    Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...

  7. servlet反射、生命周期、接口

    什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l  ...

  8. Servlet配置及生命周期

    1.设置Ecilipse快捷  file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类.              public class HelloServl ...

  9. 第24章 java线程(3)-线程的生命周期

    java线程(3)-线程的生命周期 1.两种生命周期流转图 ** 生命周期:**一个事物冲从出生的那一刻开始到最终死亡中间的过程 在事物的漫长的生命周期过程中,总会经历不同的状态(婴儿状态/青少年状态 ...

随机推荐

  1. 可伸缩性架构常用技术——之数据切分 Data Sharding/Partition

    1. 简介 本来想写一篇可伸缩性架构方面的文章,发现东西太多了,久久未能下笔,这里首先把大家最关注的数据切分(Partition/Sharding)方面的内容先写完,给大家参考. 我们知道,为了应对不 ...

  2. Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)

    鉴于之前的查询方法,在这里我们可以写一个通用的方法 /** * 鉴于 student.和customer查询的方法有好多相同之处,在此可以写一个通用的方法 */ public <T> T ...

  3. pip常用命令(转载)

    用阿里云服务器,使用pip安装第三方库的时候卡的要死.所以我就想pip能不能安装本地的包. 找到了这篇博客: http://me.iblogc.com/2015/01/01/pip%E5%B8%B8% ...

  4. sci会议和sci期刊区别是什么

    sci会议和sci期刊区别是什么?从名称上来看就很明显了,一个是学术会议,一个是学术期刊,是不同的学术研究载体,不论是会议论文还是期刊论文,都是受认可的,就目前来看,发表期刊论文的作者要偏多一些,主要 ...

  5. pandas filter数据筛选

    https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&shareId=400000000398 ...

  6. openresty开发系列37--nginx-lua-redis实现访问频率控制

    openresty开发系列37--nginx-lua-redis实现访问频率控制 一)需求背景 在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次在openresty中, ...

  7. python限定方法参数类型、返回值类型、变量类型等

    typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...

  8. 【翻译】Flink Table Api & SQL —— Table API

    本文翻译自官网:Table API  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/tableApi.ht ...

  9. windows下根据tcp端口查询对应的进程id(端口被占用)

    如下: 查询监听LISTENING的端口1027 netstat -navo|find /i "listen"|find /i ":1027" 结果如下(最后一 ...

  10. 【linux基础】ubuntu16.04 安装后,屏幕分辨率过低且不可调节

    前言 安装CUDA和NVIDIA驱动之后,屏幕分辨率过低且不可调节,尝试了几种方法都没成功解决,特此讲解决方法记录下来. 解决过程 注销进入登录界面,按ctrl+alt+F1进入命令行终端,输入账户名 ...