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对象(重要)
    @Override
    public void init(ServletConfig config) throws ServletException {
        // TODO Auto-generated method stub

    }

    // 获取当前Servlet对象的相关配置
    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    // 处理浏览器发来的请求和数据(重要)
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("Hello ServletInterface!!!");
    }

    // 获取描述信息
    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    // 销毁servlet对象(重要)
    @Override
    public 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容器

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【RAG 论文】FiD:一种将 retrieved docs 合并输入给 LM 的方法

论文: Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering ⭐⭐⭐⭐ EACL 2021, Facebook AI Research 论文速读 在 RAG 中,如何将检索出的 passages 做聚合并输入到生成模型是一个问题,本文提出了一…

类和对象一(从封装开始讲述)

目录: 一.封装 二.封装扩展之包,自定义包 三.访问限定符 四.static成员 一.封装:封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。面向对象…

Oracle 流stream数据的复制

Oracle 流stream数据的复制 --实验的目的是捕获scott.emp1表的变化,将变化应用到远程数据库scott.emp1表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 GLOBAL_NAMEStrue JOB_QUEUE_PROCESSES2 --查看数据库的名称,我的为o…

Hadoop-未授权访问-内置配合命令执行RCE

一、Hadoop常见端口及配置文件 Hadoop中有多种端口,这些端口用于不同的服务和通信。以下是Hadoop中常见的端口以及它们的用途: NameNode Web界面端口 (默认: 9870)NameNode 对客户端服务端口 (默认: 8020)Secondary NameNode Web界面端口 (默认: 9868)…

undolog

undolog回滚段 undolog执行的时间:在执行器操作bufferpool之前。 undolog页

1-02-02:虚拟化与容器化Docker环境搭建

1.02.02 虚拟化与容器化Docker环境搭建 一. 虚拟化与容器化技术简介1. 虚拟机环境2. docker环境 二. Docker 架构与隔离机制2.1 Docker 架构2.2 Docker 隔离机制2.3 资源限制2.4 Docker应用场景 三. 实战:Docker在Centos7安装与镜像加速 ❤❤❤3.1 docker安装3.2 设置镜像加速 …

物流单打印机怎么调格式距离,佳易王物流托运单管理系统软件打印单据左边距调节教程

物流单打印机怎么调格式距离,佳易王物流托运单管理系统软件打印单据左边距调节教程 一、前言 以下软件操作教程以,佳易王物流单打印管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、佳易王物流单管理系统打印…

CMake创建跨平台OpenGL工程(学习笔记)

一、跨平台环境基本配置 1、环境搭建 1)linux OpenGL环境搭建参考:ubuntu18.04 OpenGL开发(显示YUV)_ubuntu opengl-CSDN博客 https://blog.51cto.com/cerana/6433535 本文使用的是QTCreator 2)windows下环境搭建…

三. TensorRT基础入门-ONNX注册算子的方法

目录 前言0. 简述1. 执行一下我们的python程序2.转换swin-tiny时候出现的不兼容op的例子3. 当出现导出onnx不成功的时候,我们需要考虑的事情4. unsupported asinh算子5. unsupported deformable conv算子总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战…

新能源行业网间数据交换,更好用更专业的工具是什么?

新能源行业涵盖了多个方面,包括但不限于新能源汽车、可再生能源技术等。新能源行业发展具有重要的意义,新能源企业的研发数据极其重要,为了保障网络安全和数据安全,许多新能源企业采用逻辑隔离的方式进行网络隔离,此时…

C#【进阶】泛型

1、泛型 文章目录 1、泛型1、泛型是什么2、泛型分类3、泛型类和接口4、泛型方法5、泛型的作用思考 泛型方法判断类型 2、泛型约束1、什么是泛型2、各泛型约束3、约束的组合使用4、多个泛型有约束思考1 泛型实现单例模式思考2 ArrayList泛型实现增删查改 1、泛型是什么 泛型实现…

08 - hive的集合函数、高级聚合函数、炸裂函数以及窗口函数

目录 1、集合函数 1.1、size:集合中元素的个数 1.2、map:创建map集合 1.3、map_keys: 返回map中的key 1.4、map_values: 返回map中的value 1.5、array 声明array集合 1.6、array_contains: 判断array中是否包含某个元素 1.7、sort_a…

SBM模型、超效率SBM模型代码及案例数据(补充操作视频)

01、数据简介 SBM(Slack-Based Measure)模型是一种数据包络分析(Data Envelopment Analysis, DEA)的方法,用于评估决策单元(Decision Making Units, DMUs)的效率。而超效率SBM模型是对SBM模型的…

告别数据泥潭:PySpark性能调优的黄金法则

阿佑今天给大家带来个一张藏宝图——使用PySpark进行性能调优的黄金法则,从内存管理到执行计划,再到并行度设置,每一步都是提升数据处理速度的关键! 文章目录 Python Spark 详解1. 引言2. 背景介绍2.1 大数据处理技术演变2.2 Apac…

Flutter-加载中动画

效果 考察内容 AnimationControllerTweenAnimatedBuilderTransformMatrix4 实现 ///源码&#xff1a;https://github.com/yixiaolunhui/flutter_xy class LoadingView extends StatefulWidget {const LoadingView({Key? key}) : super(key: key);overrideState<LoadingV…

AI算法-高数5-线性代数1-基本概念、向量

线性代数&#xff1a;主要研究1、张量>CV计算机视觉 2、研究张量的线性关系。 深度学习的表现之所以能够超过传统的机器学习算法离不开神经网络&#xff0c;然而神经网络最基本的数据结构就是向量和矩阵&#xff0c;神经网络的输入是向量&#xff0c;然后通过每个矩阵对向量…

Vue3项目打包部署到云服务器的Nginx中

文章目录 一、打包vue3项目二、dist文件夹上传到服务器三、改nginx配置文件Docker安装nginx 一、打包vue3项目 npm run build 二、dist文件夹上传到服务器 将dist文件夹放到docker安装的nginx中的html目录下 三、改nginx配置文件 然后重启nginx【改了配置文件重启nginx才能…

Cloudflare国内IP地址使用教程

Cloudflare国内IP地址使用教程 加速网站&#xff1a; 首先我们添加一个 A 记录解析&#xff0c;解析 IP 就是我们服务器真实 IP&#xff1a; 然后侧边栏 SSL/TLS - 自定义主机名&#xff1a; 回退源这里填写你刚刚解析的域名&#xff0c;保存后回退源状态为有效再来接下的操作…

C++ 指针 参数 静态 常 友元与组合概念

一 类类型作为函数参数 1 类类型作参数类型的三种方式 1&#xff09; 对象本身作为参数 由于C采用传值的方式传递参数&#xff0c;因此使用对象本身参数时&#xff0c;形参是实参的一个拷贝。在这种情况下&#xff0c;最好显式地为类定义一个拷贝构造函数&#xff0c;以免出…

二维费用背包分组背包

二维费用背包&分组背包 一定要做的