【Servlet】浅谈一下Servlet的继承关系。

手把手教你低成本复刻大疆C板缓启动电路(附原理图与选型清单) 本文详细介绍了如何低成本复刻大疆C板缓启动电路,包括核心器件选型、电路搭建与调试实战、参数优化方法论及进阶改进思路。通过替代型号和优化设计,实现功能相近的缓启动电路,成本不到原方案的1/3,适合电子爱好者、在校学生和预算紧张的硬件工程师。 阅读详情

优快云话题挑战赛第2期
参赛话题:学习笔记

在这里插入图片描述

在这里插入图片描述


一、javax.servlet.Servlet接口

介绍

javax.servlet.Servlet类是一个接口,我们可以来看一下Servler接口的源码:

package javax.servlet;

import java.io.IOException;

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

…

接口中的方法都是没有代码快的抽象方法,而javax.servlet.Servlet接口中比较核心的抽象方法有:

  • void init();
  • void service();
  • void destroy();

二、javax.servlet.GenericServlet抽象类

javax.servlet.GenericServlet实现了接口Servlet,也重写了其中的方法,但为什么是抽象类呢?道理很简单,我们来看一下源码就不难理解原因了:

源码片段:

javax.servlet.GenericServlet实现了接口Servlet:

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
}

…

void destroy()方法被重写,但实际上并没有增添任何内容及功能。

public void destroy() {
    }

…

void init()方法被重写,这是Servlet给请求初始化时用到的方法

public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

…
void service()方法被重写,但是service方法依旧是抽象方法,不存在代码块,代码块中存在这样的抽象方法,所以javax.servlet.GenericServlet是实现了Servlet接口的抽象类。

虽然service()方法依旧是没有被实现,传入的有两个参数,一个是请求对象:ServletRequest;一个是响应对象:ServletResponse。

public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

三、javax.servlet.http.HttpServlet抽象子类

javax.servlet.http.HttpServlet继承了javax.servlet.GenericServlet抽象类,因而是其抽象子类,而在HttpServlet中,实现了service()抽象方法,让我们通过源码,看一下其功能吧:

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        long lastModified;
        if (method.equals("GET")) {
            lastModified = this.getLastModified(req);
            if (lastModified == -1L) {
                this.doGet(req, resp);
            } else {
                long ifModifiedSince;
                try {
                    ifModifiedSince = req.getDateHeader("If-Modified-Since");
                } catch (IllegalArgumentException var9) {
                    ifModifiedSince = -1L;
                }

                if (ifModifiedSince < lastModified / 1000L * 1000L) {
                    this.maybeSetLastModified(resp, lastModified);
                    this.doGet(req, resp);
                } else {
                    resp.setStatus(304);
                }
            }
        } else if (method.equals("HEAD")) {
            lastModified = this.getLastModified(req);
            this.maybeSetLastModified(resp, lastModified);
            this.doHead(req, resp);
        } else if (method.equals("POST")) {
            this.doPost(req, resp);
        } else if (method.equals("PUT")) {
            this.doPut(req, resp);
        } else if (method.equals("DELETE")) {
            this.doDelete(req, resp);
        } else if (method.equals("OPTIONS")) {
            this.doOptions(req, resp);
        } else if (method.equals("TRACE")) {
            this.doTrace(req, resp);
        } else {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object[] errArgs = new Object[]{method};
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }

…
service()方法首先会通过请求对象调用getMethod()方法来获取请求方式;

获取到请求方式后,就是各种判断语句,方法会根据不同的情况,调用与其对应的do方法,而各种do方法的实现内容基本一致,我们以请求方式为post时会调用的doPost()为例子展示一下:

doPost():

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String msg = lStrings.getString("http.method_post_not_supported");
        this.sendMethodNotAllowed(req, resp, msg);
    }

private void sendMethodNotAllowed(HttpServletRequest req, HttpServletResponse resp, String msg) throws IOException {
        String protocol = req.getProtocol();
        if (protocol.length() != 0 && !protocol.endsWith("0.9") && !protocol.endsWith("1.0")) {
            resp.sendError(405, msg);
        } else {
            resp.sendError(400, msg);
        }

    }

当我们的请求方式与调用的do方法不对应时,会报出405错误,这代表请求方式不支持。也就是说,在我们需要给服务器发起请求时,需要重写对应的do方法,不然就会出现错误。


总结

  • 继承关系:Servlet -> GenericServlet -> HttpServlet
  • Servlet中的核心方法 : init(); service(); destroy();
  • 当有请求时,service方法会自动相应(实际是tomcat容器调用的)
  • 在HttpServlet中会分析请求的方式、然后调用对应do方法。
  • 我们在新建Servlet时,需要先考虑请求方式,从而决定重写哪个do方法

在这里插入图片描述

量子化学仿真软件:VASP_(7).表面与界面性质模拟 在量子化学仿真软件领域,表面与界面性质的模拟是研究多相催化、表面反应、材料科学等领域的关键工具。VASP(Vienna Ab Initio Simulation Package)作为一种广泛使用的密度泛函理论(DFT)计算软件,提供了强大的功能来模拟表面与界面的性质。本节将详细介绍如何使用VASP进行表面与界面性质的模拟,包括模型构建、输入文件准备、计算设置、结果分析等步骤。 阅读详情

相关推荐

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3338

理解javax.servlet.Servlet ---- JavaWeb三大组件(Servlet、Filter、Listener)

JavaWEB三大组件加载顺序:listener -> filter -> servlet (当读取web.xml文件的加载顺序) 在JAVA中有一款实现web端的技术叫Servlet ,Servlet是Java后面扩展的功能,属于javax的包下。要实现web页面数据与Java后台数据交互,这就是Servlet技术。 其他web服务器先不谈,我不是很清楚,但是Tomcat还是...

chuxin_mm的博客 871

从零搭建《火影忍者》手游服务端:Linux环境部署与全流程实战

游戏服务器后端开发是构建大型多人在线体验的核心技术,其原理涉及高并发网络通信、分布式系统架构与数据一致性保障。在技术价值上,一套稳定高效的服务端不仅能支撑海量玩家实时交互,更是游戏业务逻辑、经济系统和安全防线的基石。典型的应用场景包括MMORPG、回合制卡牌、SLG等中重度手游。本文以《火影忍者》IP的横版卡牌回合制手游为例,聚焦于**手工服务端**的完整搭建过程,详细拆解从Linux系统初始化、MySQL与**Redis**缓存部署、核心服务编译、到代理后台联调的全链路实践,为开发者深入理解游戏后端架构提

weixin_30800615的博客 336

Servlet

Servlet初识,Servlet项目创建,Servlet项目部署 ,常见访问错误,Servlet运行原理,ServletApi详解,HttpServlet, HttpServletRequest,HttpServletResponse,Cookie 和 Session用法与了解,上传文件的方法

阿辉爱睡觉的博客 2156

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2854

单目标跟踪算法及其复现过程---SiamFC(一)

在test.py文件中,就是利用训练出来的模型进行测试,需要更改预训练模型的路径,测试集的路径,以OTB100为例,最后输出的是对每一帧目标位置的坐标点。代码如下:首先需要下载got10k官方库,只需要在终端输入(注意:在终端安装各种库的时候不能使用网络代理),在环境已经配置到的情况下,只需要该其中的路径和就可以运行。这个系列博客仅为了记录各目标跟踪算法的复现(大多为跑通大佬们实现的代码),包括其中出现的很多问题和错误,学到的新知识等等。解决,而且只使用在线的方法,限制了他们可以学习的模型的丰富性。

weixin_58244117的博客 4759

Java Servlet 概述

Servlet 是 Java Web 应用程序的核心组件,主要用于处理 HTTP 请求和响应。Servlet API 中有 4 个 Java 包,包括:。包含定义 Servlet 与 Servlet 容器之间契约的类和接口。。包含定义 HTTP Servlet 与 Servlet 容器之间契约的类和接口。。包含对 Servlet、Filter 和 Listener 进行标注的注解。它还为标注元件指定元数据。。包含为 Web 应用程序的配置信息提供编程式访问的类型。

swadian2008的博客 2218

泛微E9集成登录实战:5分钟搞定第三方系统单点登录配置(附避坑指南)

本文详细解析了泛微E9集成登录的实战配置流程与核心原理。通过理解其基于信任代理的身份传递机制,文章指导用户如何在5-10分钟内完成第三方系统的单点登录对接,涵盖基础配置、核心参数设置、高级表达式应用,并提供了编码问题、账号不一致等常见避坑指南,助力企业快速构建统一身份认证门户。

weixin_29185493的博客 288

【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

踩坑+排雷JavaWeb-Servlet,一文全解Servlet继承关系、生命周期、ServletConfig 和 ServletContext、容器、请求转发与重定向和获取参数等。

叶绿体不忘呼吸 1481

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

WW、forever的博客 283

深度学习在移动开发中的应用:实时姿态估计实战

我们将使用TensorFlow Lite框架,结合专为移动端优化的MoveNet模型,实现一个能够在主流Android设备上达到30FPS的多人姿态跟踪解决方案,并深入探讨其优化技巧和实际应用场景。特别是3D姿态估计、多人长期跟踪等前沿技术的发展,将进一步推动移动端姿态估计技术的应用深度和广度。在下一篇文章中,我们将探讨深度学习在移动端的另一个创新应用:实时手势识别,包括如何在资源受限的环境中实现复杂手势的实时识别,以及这项技术在AR/VR交互、智能家居控制等场景中的应用。第四部分:典型应用场景实现。

Programming Talk 325

JavaWeb三大组件 —— Servlet

然而,从 Java EE 8 开始,Servlet API 的维护权转交给了 Eclipse Foundation 的 Jakarta EE 社区,因此,在最新的 Jakarta EE 版本中,Servlet API 的包名已经更改为 jakarta.servlet。综上所述,javax.servlet 和 jakarta.servlet 的区别仅在于包名的变化,代表了不同版本的 Java Servlet API。3.点击确定,就会看到如下图,idea自动给我们创建了web.xml。

weixin_45326523的博客 2693

【四足机器人项目实战】MIT四足机器人力控电机优劣分析及解决办法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、mit力控电机方案二、弊端三、优点四、解决办法设计相关看专栏其他博客 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对XXX做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、mit力控电机方案 MITCheetahMini驱动器采用的电机是类似于公版电机T-MotorU8的型号

qq_35635374的博客 6088

Servlet继承关系

3 Servlet继承关系(了解) 3.1 Servlet继承关系 创建一个Servlet程序,必须要实现(直接实现或间接实现)Servlet接口,比如继承HttpServlet,HttpServlet继承了GenericServlet,GenericServlet实现了Servlet接口,继承结构如下: 因此以后在开发中,如果需要创建Servlet程序,我们只需要写一个类,去继承HttpSer...

weixin_43694465的博客 899

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Servlet——分析和模拟实现Servlet继承关系、HttpServlet

目录 Servlet继承关系图 Servlet继承关系图 一、Servlet如何设计的继承体系 Aservlet.java public class AServlet implements Servlet { private ServletConfig servletConfig; @Override public void init(ServletConf...

Guizy 1613

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Servlet总结——体系结构、实现Servlet继承关系

文章目录体系结构一、Servlet继承关系图二、分析HttpServlet的底层实现 体系结构 一、Servlet继承关系图 GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象。 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可。 HttpServlet:对http协议的一种封装,简...

weixin_44157233的博客 1237

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JavaWeb Servlet的继承关系源码分析、service方法源码分析

service方法中,先通过req.getMethod()获取到客户端的请求方式method,然后对method分GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE等不同的请求方式进行不同的处理。默认用户第一次发送HTTP请求,才会进行Servlet的实例化(调用构造方法)、初始化(调用init方法);因为这是Servlet的405的默认实现,如果我们自己没有实现,则会抛出默认的异常。现在我们重点对POST请求的this.doPost(req, resp)方法进行学习。

Bulut0907 1129

javaweb-servlet-继承关系以及service方法、servlet生命周期

1.Servlet的继承关系1.继承关系 三者可以根据ctrl+鼠标左键进入javax.servlet.Servlet接口:(下面有个抽象类)javax.servlet.GenericServlet抽象类(这个抽象类又包含了)javax.servlet.Http.HttpServlet抽象子类(也是个抽象子类)2.相关方法javax.servlet.Servlet接口:void init(config)--初始化方法。

xlsw_的博客 906

【Servlet】继承关系以及service方法

查看doPost方法,如果我们继承HttpServlet的类没有重写HttpServlet的doPost请求,它就会调用父类(HttpServlet)的doPost方法,直接报405错。javax.GenericServlet抽象类中service方法仍然是抽象的,但init()和destroy()方法已经实现。javax.servlet.http.HttpServlet实现了service方法。javax.servlet.Servlet接口。javax.servlet.Servlet接口。

qq_39921135的博客 589

Servlet 接口层次与继承关系详解

/ 需要实现所有方法@Override@Override// 需要自行处理所有协议细节// 其他方法实现...

echo_123qq的博客 788

servlet继承关系

Servlet API:由两个软件包组成,对应于HTTP协议的软件包、对应于除了Http协议以外的其他软件包, 总的来说,Servlet API可以适用于任何通信协议 Servlet继承关系 ServletConfig:接口 ServletContext  getServletContext(): 获取Servlet上下文对象 String getInitParameter(String  na...

qq_41740017的博客 669

Javaweb-servlet的继承关系和生命周期

如果请求方法是get 方式,则会调用doGet 方法。这里解释了为什么在写Servlet 时都要重写doGet 或doPost 方法,这样可以执行我们的逻辑。对应上面提到的Servlet 的init,service,destroy方法。这三个方法的调用实际是由tomcat 执行的。service 服务方法一定是处理请求的,这个方法是对get,post等请求处理。可以在添加一个servet的构造方法,这个是由tomcat通过反射调用执行。第一次访问输出结果:构造方法,init方法,service都调用了。

qq_45860901的博客 1026

Servlet的继承关系

Servlet的继承关系1. 继承关系2.相关方法3.小结 1. 继承关系 javax.servlet.Servlet接口 javax.servlet.GenericServlet抽象类 javax.servlet.http.HttpServlet抽象子类 2.相关方法 javax.servlet.Servlet接口: void init(config) - 初始化方法 void service(request,

qq_51772871的博客 950

Servlet的继承关系和生命周期

(2)默认情况下,收到请求后开始实例化,初始化,并开始服务,后面只是开启服务,调用service方法;这种方式的启动速度很快,但是响应速度,特别是第一个用户的响应速度很慢,我们可以通过设置<load-on-startup>数字<load-on-startup>来设置servlet的启动先后顺序,这样设置后启动服务器时会耗时更多,因为启动即创建实例,初始化,但后续的响应速度很快,而且很公平;(1)servlet的生命周期对应三个方法 init() service() destroy()

2401_88876805的博客 551

Servlet的继承关系及几种实现方法

Servlet的继承关系及几种实现方法 Dynamic web module version版本:2.5 Servlet的继承关系: 实现方法: 方式一: 1、新建普通java类 2、继承HttpServlet类 3、重写service()方法 4、配置web.xml配置项(WebContent/WEB-INF目录下的web.xml) public class Servlet01 exte...

weixin_39571268的博客 5366

Servlet继承关系(图来自尚硅谷笔记)

对Servlet继承关系进行一些大概的认识。 继承关系的起点是 Servlet接口,接口作为一种规定,规定一个合格的servlet程序应该有哪些方法,方法的参数是什么,方法的返回值类型,抛出异常的声明。 方法的功能在注释有写(英语渣表示忽略了) GenericServlet实现了Servlet接口。这个实现类实现了很多空方法,也就是对方法进行实现但是又不写任何内容。持有ServletConfig对象,在一些方法的实现中使用了ServletConfig对象。以下是源码: //javax.servlet

pison007的博客 604
上一篇: 【Day25】LeetCode算法刷题[19. 删除链表的倒数第 N 个结点 ] [870. 优势洗牌 ]
下一篇: 【Servlet】浅谈 Servlet 之 保存作用域
.29.
.29. 2022 社区之星年度评选TOP 30 2022 社区之星年度评选TOP 30
博客等级 码龄5年 1万+粉丝 203原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.29.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值