Servlet 生命周期

文章目录

  • Servlet 生命周期
    • 主要有三个方法
    • ● 示意图
    • ● 初始化阶段
    • ● 处理浏览器请求阶段(service 方法)
    • ● 终止阶段 destory 方法(体现 Servlet 完整的生命周期)
    • ● 代码演示

Servlet 生命周期

主要有三个方法

​ 1. init()初始化阶段

​ 2. service()处理浏览器请求阶段

​ 3. destroy()终止阶段

● 示意图

在这里插入图片描述

● 初始化阶段

Servlet 容器(比如: Tomcat)加载 Servlet,加载完成后,Servlet 容器会创建一个 Servlet 实例并调用 init()方法,init()方法只会调用一次, Servlet 容器在下面的情况装载 Servlet

​ 1. Servlet 容器(Tomcat)启动时自动装载某些 servlet,实现这个需要在 web.xml 文件中添加 1 1 表示装载的顺序

​ 2. 在 Servlet 容器启动后,浏览器首次向 Servlet 发送请求(这个前面说过)

​ 3. Servlet 重新装载时(比如 tomcat 进行 redeploy【redeploy 会销毁所有的 Servlet 实例】), 浏览器再向 Servlet 发送请求的第 1 次

● 处理浏览器请求阶段(service 方法)

  1. 每收到一个 http 请求,服务器就会产生一个新的线程去处理[线程]

  2. 创建一个用于封装 HTTP 请求消息的 ServletRequest 对象和一个代表 HTTP 响应消息的 ServletResponse 对象

  3. 然后调用 Servlet 的 service()方法并将请求和响应对象作为参数传递进去

● 终止阶段 destory 方法(体现 Servlet 完整的生命周期)

当web 应用被终止,或者Servlet 容器终止运行,或者Servlet 类重新装载时,会调用 destroy() 方法, 比如重启 tomcat ,或者 redeploy web 应用

● 代码演示

开发 Servlet, 通常编写 doGet、doPost 方法。来对表单的 get 和 post 请求进行分发处理

HTML部分

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>注册</title>
</head><body><h1>注册用户</h1><form action="http://localhost:10000/do_servlet/ok" method="post">u: <input type="text" name="username" /><br><br><input type="submit" value="注册用户" /></form>
</body></html>
    1. service 方法处理浏览器的请求(包括 get/post)
    1. 当浏览器每次请求 Servlet 时,就会调用一次 service
    1. 当 tomcat 调用该方法时,会把 http 请求的数据封装成实现 ServletRequest 接口的 request 对象
    1. 通过 servletRequest 对象,可以得到用户提交的数据
    1. servletResponse 对象可以用于返回数据给 tomcat->浏览器

Servlet.java部分

/*** 1. service 方法处理浏览器的请求(包括 get/post)* 2. 当浏览器每次请求 Servlet 时,就会调用一次 service* 3. 当 tomcat 调用该方法时,会把 http 请求的数据封装成实现 ServletRequest 接口的 request 对象* 4. 通过 servletRequest 对象,可以得到用户提交的数据* 5. servletResponse 对象可以用于返回数据给 tomcat->浏览器** @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/
@Override
public void service(ServletRequest servletRequest,ServletResponse servletResponse)throws ServletException,IOException{count++;// 如果 count 的值,在不停的累计,说明 HelloServlet 是单例的System.out.println("hi HelloServlet~ count= "+count);// Tomcat 每处理一次 http 请求,就生成一个新的线程System.out.println("当前线程 id= "+Thread.currentThread().getId());// 1. ServletRequest 没有得到提交方式的方法// 2. ServletRequest 看看 ServletRequest 子接口有没有相关方法// 3. 小技巧:ctrl+alt+b => 可以看到接口的子接口和实现子类// 4. 把 servletReqeust 转成 HttpServletRequest 引用// 5. 仍然是 Java 基础的 OOPHttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;String method=httpServletRequest.getMethod();if("GET".equals(method)){doGet(); // 用 doGet() 处理 GET 请求}else if("POST".equals(method)){doPost(); // 用 doPost() 处理 POST 请求}}/*** 用于响应 get 请求的*/
public void doGet(){System.out.println("doGet() 被调用..");}/*** 用于响应 post 请求的*/
public void doPost(){System.out.println("doPost() 被调用..");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27545.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;60&#xff09;-- 算法导论6.4 4题 四、证明&#xff1a;在最坏情况下&#xff0c;HEAPSORT 的时间复杂度是Ω (nlgn)。 文心一言&#xff1a; 要证明在最坏情况下&#xff0c;HEAPSORT 的时间复杂度是 Ω(n log n)&#xff0c…

DKN和KGC阅读

1. DKN 作者将外部知识图包含的知识融入新闻嵌入。 &#xff08;1&#xff09;将新闻标题单词词嵌入&#xff0c;单词链接的实体嵌入&#xff0c;以及实体的上下文嵌入(邻居实体嵌入的平均)建模为CNN输入的三个通道。 &#xff08;2&#xff09;然后使用KCNN模型&#xff0c…

大数据第一步-Mac安装Hadoop3

1.安装工作 1.1 准备工作 前提是把jJDK8安装好&#xff0c;hadoop3.x最低需要jdk8。 然后打开共享把远程登陆打开&#xff0c;不打开说是后面会报错&#xff0c; 到终端输入命令&#xff1a;ssh localhost 生成新的keygen否则后面会报错 Permission denied 命令&#xff1a;…

数学建模-拟合算法

这里的线性函数指的是参数为线性&#xff0c;而不是变量为线性。 yabx^2是线性的 用的比较多的是多项式拟合和自己定义的 拓展资料&#xff1a;工具箱曲线拟合类型评价解释 文件-导出代码 自动生成的代码修改图名和标签 如果不收敛&#xff0c;自己要修改初始值&#xf…

Python(Conda)环境迁移(从win10到macos12.5)笔记

文章目录 背景环境 1、通过conda迁移2、通过python迁移3、最后&#xff08;逐一安装&#xff09; 背景环境 win10是以前安装的conda和py。目前需要导出的环境的版本为py3.10.4。macos是重新安装的conda&#xff0c;目前有的环境是py3.11.4。我是先进conda用刚安装好的base创建…

vulnhub靶场noob:1

靶机下载地址&#xff1a;Noob: 1 ~ VulnHub Arp发现主机 arp-scan -l 扫描端口 nmap --min-rate 10000 -p- 192.168.21.132 扫描端口的服务版本号以及操作系统 nmap -sV -sT -sC -O -p21,80 192.168.21.132 可以看到ftp里面有文件&#xff0c;web是php 扫描基础漏洞 nma…

C++ cin

cin 内容来自《C Primer》 cin使用>>运算符从输入流中抽取字符 int carrots;cin >> carrots;如下的例子&#xff0c;用户输入的字符串有空格 #include <iostream>int main() {using namespace std;const int ArSize 20;char name[ArSize]; //用户名char …

【Linux】网络基础之UDP协议

目录 &#x1f308;前言&#x1f338;1、传输层&#x1f33a;2、重谈端口号&#x1f368;2.1、端口号范围划分&#x1f367;2.2、认识知名端口号 &#x1f340;3、UDP协议&#x1f368;3.1、UDP协议报文结构&#x1f369;3.2、UDP协议的特点&#x1f36a;3.3、基于UDP的应用层协…

linux -rw-r--r-x的含义

-rw-r--r-x的含义 权限显示位一共为10位&#xff0c;分为四段&#xff0c;从第2位算起&#xff0c;每3个1组 -rw-r--r-x-表示为普通文件文件所属用户拥有的权限rw-&#xff1a;426该用户所属组拥有的权限r--&#xff1a;4其他用户拥有的权限r-x&#xff1a;415 操作英文对应数…

生成式AI时代,亚马逊云科技致力推动技术的普惠,让更多企业受益

当谈及AIGC时&#xff0c; 我们该谈些什么&#xff1f; 生成式AI技术与应用的不断发展&#xff0c;为各个行业都注入了全新的机会与活力。AIGC成为了今年最为激动人心的技术话题。亚马逊云科技也一马当先&#xff0c;在6月27-28日&#xff0c;2023亚马逊云科技中国峰会上分享…

软件测试项目经验重要吗?

目前从行业薪资排名看&#xff0c;IT行业是我们普通人能够接触到的高薪行业&#xff0c;像金融、银行和投行等高薪职位&#xff0c;张雪峰老师在他的视频中分析过&#xff0c;不是一般人可以拿捏的。IT行业的大部分岗位需要专业的技能&#xff0c;留给我们这些非计算机专业科班…

Mac 谷歌浏览器选中查看悬浮出现的元素样式

Mac 谷歌浏览选中查看悬浮出现的元素样式 1. Mac 暂停脚本执行快捷键 command \或F8 2.以斗鱼主站下载悬浮面板为例 3. 操作步骤 &#xff08;1&#xff09;打开控制台&#xff0c;选中源代码 &#xff08;2&#xff09;鼠标选中下载&#xff0c;让面板悬浮出来 &#xf…