Java 之 Servlet中的生命周期
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中的生命周期的更多相关文章
- java Web servlet简介及其生命周期
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...
- Java Web学习总结(9)——servlet和Jsp生命周期解读
一.servlet的工作工程 Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的 ...
- Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)
该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...
- Java对象在JVM中的生命周期
当你通过new语句创建一个java对象时,JVM就会为这个对象分配一块内存空间,只要这个对象被引用变量引用了,那么这个对象就会一直驻留在内存中,否则,它就会结束生命周期,JVM会在合适的时 ...
- 面试之jsp、Servlet相关知识——生命周期, 区别等
1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...
- servlet简介及生命周期
Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上 ...
- servlet反射、生命周期、接口
什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l ...
- Servlet配置及生命周期
1.设置Ecilipse快捷 file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类. public class HelloServl ...
- 第24章 java线程(3)-线程的生命周期
java线程(3)-线程的生命周期 1.两种生命周期流转图 ** 生命周期:**一个事物冲从出生的那一刻开始到最终死亡中间的过程 在事物的漫长的生命周期过程中,总会经历不同的状态(婴儿状态/青少年状态 ...
随机推荐
- 经典批处理实现自动关机(BAT)
经典批处理实现自动关机1.BAT @ECHO offTITLE 自动关机程序 作者:廖晓青 :startCLSCOLOR 1frem 使用COLOR命令对控制台输出颜色进行更改MODE con: CO ...
- python的super深入了解(转)
1.python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object): def __init__(s ...
- odoo开发笔记 -- 异常处理in resolve_deps field = model
场景描述: 更新代码,重启服务服务后,odoo后台报错,提示关键字:in resolve_deps field = model._fields[fname] KeyError: 'entry_id' ...
- Uni-app 使用总结
1.去掉顶部导航 在page.json中添加 "globalStyle" : { "navigationBarTextStyle" : "black& ...
- Spark资源调度及任务调度
1. 资源分配 通过SparkSubmit进行提交应用后,首先会创建Client将应用程序(字节码文件.class)包装成Driver,并将其注册到Master.Master收到Client的注册请 ...
- 服务器推送(Server push)技术总结
1. 短轮询 ajax按一定间隔去请求 2. 长轮询(long Polling) Long Polling的实现很简单,可分为四个过程: 发起Polling发起Polling很简单,只需向服务器发起请 ...
- 多线程、线程池、线程创建、Thread
转载自https://www.cnblogs.com/jmsjh/p/7762034.html 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行 ...
- Procedural Mesh Component in C++:Getting Started
转自:https://wiki.unrealengine.com/Procedural_Mesh_Component_in_C++:Getting_Started I create a simple ...
- 2019年广东外语外贸大学程序设计竞赛(新手赛)-F题(好快的刀)题解
题面: 题目意为,任意连接两个圆的圆心形成一条直线,计算与该直线相交或相切的圆的数量,求这些直线最多能相交或相切多少个圆 解题思路: 遍历所有的圆,计算出两圆圆心生成的直线,再遍历其他的圆,检测这些圆 ...
- Linux下Python安装PyMySQL成功,但无法导入的问题
今天使用 Nginx 部署 Django应用.安装python库都显示成功安装. 尝试启动 uwsgi 服务,竟然报错 Traceback (most recent call last): File ...