当前位置: 首页 > news >正文

Servlet 执行流程 生命周期 方法介绍

目录

  • 1 执行流程
  • 2 生命周期
  • 3 方法介绍

1 执行流程

Servlet由谁创建?Servlet方法由谁调用?

Servlet由web服务器创建,Servlet方法由web服务器调用

服务器怎么知道Servlet中一定有service方法?

因为我们自定义的Servlet,必须实现Servlet接口并且复写其方法,而Servlet接口中有service方法

2 生命周期

对象的生命周期指一个对象从被创建到被销毁的整个过程

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段:

  1. 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象

可以使用loadOnStartup来更改Servlet对象创建时机
@WebServlet(urlPatterns = "/demo",loadOnStartup = 1)
负整数:第一次被访问时创建Servlet对象
0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高

  1. 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载 配置文件、创建连接等初始化的工作,该方法只调用一次
  2. 请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理
  3. 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例,该实例随后会被Java的垃圾收集器所回收

在这里插入图片描述

直接点击这个红色按钮,是不是执行destroy方法的,因为这个相当于强制关闭,拔掉电源,他这个逻辑不会执行

可以通过命令行的mvn tomcat7:run来演示
在这里插入图片描述

使用ctrl+c进行停止

在这里插入图片描述

编辑如下代码:

package com.tsg.web;import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;@WebServlet("/demo2")
public class ServletDemo2 implements Servlet {public void init(ServletConfig servletConfig) throws ServletException {System.out.println("init");}public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("servlet hello world");}public void destroy() {}public ServletConfig getServletConfig() {return null;}public String getServletInfo() {return null;}}

启动程序并且浏览器访问

在这里插入图片描述
刷新多次,会发现init方法只执行一次,service方法多次执行

在这里插入图片描述

使用loadOnStartup来进行更改对象创建时机

@WebServlet(urlPatterns = "/demo2" , loadOnStartup = 1)

在这里插入图片描述

启动程序:

在这里插入图片描述

3 方法介绍

void init(ServletConfig config)

初始化方法,在Servlet被创建时执行,只执行一次

void service(ServletRequest req,ServletResponse res)

提供服务方法,每次Servlet被访问,都会调用该方法

void destroy()

销毁方法,当Servlet被销毁时,调用该方法,在内存释放或服务器关闭时销毁Servlet

ServltConfig getServletConfig()

获取ServletConfig对象

String getServletInfo()

获取Servlet信息

在这里插入图片描述

http://www.lryc.cn/news/594424.html

相关文章:

  • 超大整数任意进制之间在线转换工具
  • 通俗易懂神经网络:从基础到实现
  • Unity 新旧输入系统对比
  • 【数据结构】树状数组
  • 网安-文件上传-upload-labs
  • 深入理解MyBatis:总结核心概念
  • Mermaid 语法
  • SpringBoot集成Skywalking链路跟踪
  • 44.sentinel授权规则
  • Dev-C++——winAPI贪吃蛇小游戏
  • codepen使用
  • 网鼎杯2020青龙组notes复现
  • AG32:解锁MCU+FPGA应用新姿势,功能与实战全解析
  • 《杜甫传》读书笔记与经典摘要(一)
  • 桑科草原一景
  • RabbitMQ:解锁高效消息传递的密码[特殊字符]
  • C++STL之stack和queue
  • 【pandoc实践】如何将wordpress文章批量导出为Markdown格式
  • Spring Boot 自动装配用法
  • 从0开始学linux韦东山教程Linux驱动入门实验班(4)
  • Spring Boot 一个注解搞定「加密 + 解密 + 签名 + 验签」
  • 零基础 “入坑” Java--- 十三、再谈类和接口
  • KOSMOS-2: 将多模态大型语言模型与世界对接
  • 算法训练营day25 回溯算法④ 补充联系题目 332.重新安排行程、51. N皇后、37. 解数独
  • PID控制原理分析及应用(稳态误差详细分析)(一)
  • 30天打牢数模基础-卷积神经网络讲解
  • STM32-第八节-TIM定时器-4(编码器接口)
  • 2025 年科技革命时刻表:四大关键节点将如何重塑未来?
  • 【高等数学】第四章 不定积分——第五节 积分表的使用
  • 【实战1】手写字识别 Pytoch(更新中)