Servlet讲解

Servlet生命周期

我们只需要继承Servlet接口,查看方法即可看出Servlet的生命周期

import java.io.IOException;import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class ServletInterface implements Servlet {// 初始化当前Servlet对象(重要)@Overridepublic void init(ServletConfig config) throws ServletException {// TODO Auto-generated method stub}// 获取当前Servlet对象的相关配置@Overridepublic ServletConfig getServletConfig() {// TODO Auto-generated method stubreturn null;}// 处理浏览器发来的请求和数据(重要)@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// TODO Auto-generated method stubSystem.out.println("Hello ServletInterface!!!");}// 获取描述信息@Overridepublic String getServletInfo() {// TODO Auto-generated method stubreturn null;}// 销毁servlet对象(重要)@Overridepublic void destroy() {// TODO Auto-generated method stub}}

其中最重要的三个方法是init,service,destory

我们可以从这几个方法中大致看出一个Servlet接口对象的一生:

  1. getServletConfig()获取Servlet的配置信息
  2. init(ServletConfig config)方法初始化创建Servlet接口的对象
  3. service()方法处理浏览器发给服务器(比如Tomcat)的ServletRequest请求,并返回ServletResponse响应
  4. 销毁Servlet接口的对象

Servlet接口,HttpServlet抽象类的作用+继承关系

Servlet接口定义了Servlet的生命周期

GenericServlet抽象类实现了Servlet接口,重写实现了init(),getServletConfig(),getServletInfo()和destory()方法

HttpServlet抽象类继承了GenericServlet抽象类,继承了GenericServlet类,只需要强制重写实现service方法即可**(HttpServlet实现了最重要的service()方法)**

HttpServlet为了更好的贴合Http协议请求的请求策略,重回实现了Servlet接口的service()方法,并将其分化成了doGet(),doPost(),doPut(),doDelete()等方法

在这里插入图片描述

Tomcat和Servlet的关系(手写一个Tomcat的关键)

Tomcat本身是一个容器,一个Servlet的容器

动态web项目的目录结构
在这里插入图片描述

Tomcat运行在内存中,容器中有一定数量的Servlet
在这里插入图片描述
其中web.xml配置了每一个Servlet的url访问映射
在这里插入图片描述

在这里插入图片描述
Tomcat会读取web.xml文件,然后将访问映射放到一个HashMap当中(这个HashMap被称为Servlet路由/Servlet容器)

在这里插入图片描述

在这里插入图片描述
当浏览器的请求请求Tomcat时,Tomcat存在一个解析器,去解析请求当中请求头的url,然后去HashMap当中根据key寻找Servlet实现类对象的全限定名

在这里插入图片描述
最后根据全限定名,利用反射获取对象,运行service方法/doGet方法等。这里的HashMap显然充当一个路由表的功能,所以我们可以叫它Servlet路由/Servlet容器

在这里插入图片描述

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

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

相关文章

对数据进行标准化和归一化

数据的形式:保存在CSV中,第一列为姓名,第二列之后为特征。 标准化 输入文件的路径,设置保存转化后的文件路径 import pandas as pd from sklearn.preprocessing import StandardScaler# 读取CSV文件 data pd.read_csv(rC:\User…

信息系统项目管理师(高项)--学习笔记【第7章:立项管理】完善中~~~

目录 第7章 立项管理7.1 项目建议与立项申请7.2 项目可行性研究7.2.1可行性研究的内容7.2.2初步可行性研究7.2.3详细可行性研究 7.3 项目评估与决策 第7章 立项管理 7.1 项目建议与立项申请 7.2 项目可行性研究 7.2.1可行性研究的内容 7.2.2初步可行性研究 7.2.3详细可行性…

AMD CPU Nvidia GPU Ubuntu 黑屏网络故障案例分享

(首发地址:学习日记 https://www.learndiary.com/2024/05/grub-xorg/) 朋友们,大家好!我是来自淘宝网学习日记小店的 Linux 服务者 learndiary。今天,我将和大家分享一个关于AMD Ryzen 9 7950X3D 16核 CPU …

GPT 大型语言模型可视化教程

网址: LLM Visualization 简介 欢迎来到 GPT 大型语言模型演练!在这里,我们将探索只有 85,000 个参数的 nano-gpt 模型。 它的目标很简单:取一个由六个字母组成的序列: C B A B B C 并按字母顺序排列,即…

Jboss 反序列化 CVE-2017-12149

一、漏洞简介 JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。在/invoker/readonly路径下,攻击者可以构造序列化代码传入服务器进行反序列化,由于没有对反序列化操作进行任何检测,导致攻击者可以执行任意代码。 而jbo…

TCP(TCP客户端、服务器如何通信)

一、TCP介绍 TCP的特点: 面向连接的协议:TCP是一种可靠的、面向连接的协议,在通信之前需要建立连接,以确保数据的可靠传输。这意味着在传输数据之前,发送方和接收方之间需要建立一条可靠的连接通道。流式协议&#x…

Linux实验 系统管理(三)

实验目的: 了解Linux系统下的进程;掌握一类守护进程——计划任务的管理;掌握进程管理的常用命令;掌握进程的前台与后台管理;了解Linux系统的运行级别;掌握系统服务管理的常用命令。 实验内容: …

在线教育系统先进单位事迹,教育行业公众号线上推广如何有效果?

教育行业的市场前景十分大,相对的来说行业之间的竞争也是十分激烈的,培训机构想要在激烈竞争中脱颖而出就需要进行推广,很多机构都是有自己的公众号,那教育行业公众号线上推广如何有效果? 微信公众号可以做做教程&…

040——移植数据库sqlite3到i.mx6ull

目录 一、下载 二、移植数据库 三、测试sqlite3 一、下载 SQLite Download Page 暂时先下载最新版的试试,我们以前其实在ubuntu上直接使用过 嵌入式数据库sqlite3_常见的嵌入式数据库-CSDN博客 当时我把常用的操作和怎么使用记录下来了 现在把他移植到开发板…

GitFlow流程

分支角色 主分支(master/main): 代表最新的正式发布版本,应始终保持稳定,可以直接用于生产环境。只有在完成一个新版本的开发并经过测试后,才将发布分支合并到主分支。 开发分支(develop): 包含…

下水道井盖多分类检测定位

下水道井盖识别,多分类,使用yolov5训练,采用一部分开源数据集和自建数据集。python pytorch opencv 深度学习#人工智能#深度学习#目标检测

Python 的 QT 界面中记住上次的设置

要在 Python 的 QT 界面中记住上次的设置,可以使用一些持久化存储的方法,比如将设置信息保存到文件中或使用数据库。 以下是一个简单的示例,展示了如何将设置信息保存到文件中: import jsondef save_settings(settings):with op…

【Python项目】基于大数据的【电影市场预测分析】

技术简介:使用Python技术、B/S架构、MYSQL数据库等实现。 系统简介:系统都需要简单的安全登陆检查,在登陆成功之后要进行在映电影的分析、票房分析、电影数据等功能相关性的数据统计,为了使用方便这些统计型的数据使用图表来进行表…

Kafka 环境搭建和使用之单机模式详细教程

上一篇:Kakfa 简介及相关组件介绍 下一篇:Kafka 环境搭建之伪分布式集群详细教程 Kafka 环境搭建 Kafka的环境搭建可以根据不同的需求和场景采取不同的模式,主要包括以下几种: 单机模式(Standalone Mode): 在这种模式下,Kafka、Zookeeper 以及生产者和消费者都在同一…

【基于element ui的color选择器】基于element ui的color选择器

技术版本如下&#xff1a; vue 2.6.14 less 3.13.1 element-ui 2.15.6 less-loader 5.0.0需求&#xff1a; 支持RGB、HEX编码、支持吸管吸取颜色、颜色选择器、颜色模板、透明度、色板、线性渐变颜色 效果图&#xff1a; 1.引入选择器的color-all文件 <template><…

web前端之纯CSS实现简单酷炫的照片墙效果、排除元素的伪类、scale

MENU 效果htmlstylescale:not() 效果 html <div class"container"><div class"box"><img src"../../image/1_.jpg"></div><div class"box"><img src"../../image/2_.jpg"></div>…

【python量化交易】qteasy使用教程06——创建自定义因子选股交易策略

创建自定义因子选股策略 使用qteasy创建自定义因子选股交易策略开始前的准备工作本节的目标Alpha选股策略的选股思想计算选股指标用FactorSorter定义Alpha选股策略交易策略的回测结果用GeneralStg定义一个Alpha选股策略回测结果&#xff1a;本节回顾 使用qteasy创建自定义因子选…

Electron、QT、WPF三强争霸,该支持谁呢?

Electron、QT、WPF都是跨平台的桌面应用开发框架&#xff0c;都是非常流行的&#xff0c;作为开发者该选用哪个呢&#xff1f;本文从多个角度分析一下。 一、定义 Electron、Qt 和 WPF 都是用于创建桌面应用程序的框架或工具&#xff0c;它们各自有着不同的特点和优势。 Elec…

ffmpeg 读取流报错: Non-monotonous DTS in output stream

在处理媒体文件时&#xff0c;我们可能会遇到各种错误&#xff0c;其中之一就是“Non-monotonous DTS in output stream 0:1; previous: 36963866, current: 36611997; changing to 36963867. This may result in incorrect timestamps in the output file.”这个错误通常发生在…