(九)JavaWeb后端开发——Servlet
目录
1.Servlet由来
2.Servlet快速入门
3.Servlet执行原理
4.Servlet生命周期
1.Servlet由来
在JaveEE API文档中对Servlet的描述是:可以运行在服务器端的微小程序,但是实际上,Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则,所以说编程人员需要去自定义一个类实现,Servlet接口,并重写其中的方法
浏览器请求服务器的信息的时候,有静态资源和动态资源,动态资源在不同用户访问时的表现不同,其中的逻辑由Java代码规定,所以需要一个Java类,而这个Jave类依赖于服务器(tomcat)才能运行,那么tomcat如何识别这个Java类呢?一定是需要一些规则,也就是接口(在Java中规则就是接口),所以Servlet接口应运而生

2.Servlet快速入门
- 创建JavaEE项目
- 自定义一个类,实现servlet接口
- 实现接口中的抽象方法
- 配置servlet
| Servlet接口的方法 | 方法描述 |
|---|---|
| init() | 初始化方法,在Servlet被创建时执行,且只会执行一次 |
| getServletConfig() | 获取ServletConfig对象,即Servlet的配置对象 |
| getServletInfo() | 获取Servlet的一些信息,版本,作者等等 |
| service() | 提供业务逻辑的代码,每一次Servlet被访问时都执行 |
| destroy() | 在服务器正常关闭时执行,且只会执行一次 |
配置servlet要在web.xml的根标签里面
<!-- 配置servlet -->
<servlet><servlet-name>demo1</servlet-name><servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class><!-- 全类名 -->
</servlet><servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern><!-- 资源路径 -->
</servlet-mapping>
3.Servlet执行原理
当启动项目之后就可以执行service()方法中的业务逻辑了,但是其中Servlet的执行原理是怎么样的呢?看下面这个视频讲得很清楚 3_Servlet_执行原理_哔哩哔哩_bilibili

执行原理:
- 服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的servlet的资源路径
- 查找web.xml文件,是否有对应的<url-pattern>标签体内容
- 如果有,则在找到对应的<servlet-class>全类名
- tomcat会将字节码文件加载进内存,并且创建其对象
- 调用其方法
4.Servlet生命周期
- 被创建:执行init方法,只执行一次
- 提供服务:执行service方法,执行多次
- 被销毁:执行destroy方法,只执行一次
相关文章:
(九)JavaWeb后端开发——Servlet
目录 1.Servlet由来 2.Servlet快速入门 3.Servlet执行原理 4.Servlet生命周期 1.Servlet由来 在JaveEE API文档中对Servlet的描述是:可以运行在服务器端的微小程序,但是实际上,Servlet就是一个接口,定义了Java类被浏览器访问…...
【零售和消费品&家居用品】家庭门窗开闭状态安全监控系统源码&数据集全套:改进yolo11-DCNV2
改进yolo11-GhostDynamicConv等200全套创新点大全:家庭门窗开闭状态安全监控系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”…...
【JavaScript】axios 二次封装拦截器(接口、实例、全局)
学习 coderwhy 老师结合 ts 二次封装 axios 目录结构 config config\index.ts // export const BASE_URL "http://codercba.com:9002"; export const TIME_OUT 10000;// 1. 根据环境变量区分接口地址 // let BASE_URL: string; // if (process.env.NODE_ENV &qu…...
Linux_02 Linux常用软件——vi、vim
vi编辑器有三种主要模式,每种模式的功能和用途不同: 一、命令模式 (Command Mode): - 启动 vi 时默认进入此模式。 - 你可以在此模式下移动光标,输入各种命令(如删除、复制、粘贴等)。 yy:…...
C++代码优化--要求或禁止在堆中产生对象
目录 1.引言 2.栈与堆区别 2.1. 栈(Stack) 2.2. 堆(Heap) 3.限制在堆上分配内存的好处 4.对象在栈上分配内存的方法 4.1. 使用RAII(资源获取即初始化) 4.2. 避免使用new和delete 4.3. 限制对象的生…...
MybatisPlus入门(六)MybatisPlus-空值处理
一、MybatisPlus-空值处理 1.1)问题引入: 在查询中遇到如下情况,有部分筛选条件没有值,如商品价格有最大值和最小值,商品价格部分时候没有值。 1.2)解决办法: 步骤一:新建查询实体…...
钉钉内集成第三方免密登录(Vue+.Net)
需要实现的效果就是在钉钉内点击应用能跳转到第三方网站并且免密登录 1.登录钉钉PC端管理后台 2.通过管理后台进去开发者后台 3.应用开发 创建H5微应用 4.应用创建成功后直接点权限管理全部授权 5.设置H5登录地址 6. 应用管理发布 至此需要配置的步骤全部已完成,…...
卷积神经网络实验三:模型优化(1)
作者有话说: 这篇文章写的还是比混乱的。因为本人也是第一次做这样的尝试,虽然接触深度学习有一年了,但是对于模型的优化仅仅是局限于理论上。通过这一次的实验,我对于模型的理解也更深了几分。我不期望这篇文章能帮你能解决多大问…...
STM32F103的CAN通讯接收测试
首先配置CUBEMX 1.打开CUBEMX 设置时钟,由于我没有外部时钟,所以我选择内部时钟,选择8倍频,1分频,APB1时钟频率为32MKHZ,也就是说每秒能够执行 3200 万个时钟周期,1M是每秒执行100万个时钟周期。 2.CAN收…...
【Rust中的智能指针】
Rust中的智能指针 什么是智能指针?什么是Rust中的智能指针?Rust中的智能指针BoxBox的使用场景 Rust中的智能指针Rc与Arcrust中的RefCellrefcell的缺点:rust中的weak先来看看C中的weak_ptr定义代码示例: Deref和Drop 总结 什么是智…...
基于深度学习的社交网络中的社区检测
在社交网络分析中,社区检测是一项核心任务,旨在将网络中的节点(用户)划分为具有高内部连接密度且相对独立的子群。基于深度学习的社区检测方法,通过捕获复杂的网络结构信息和节点特征,在传统方法基础上实现…...
【Python基础】
一、编程语言介绍 1、分类 机器语言 (直接用 0 1代码编写)汇编语言 (英文单词替代二进制指令)高级语言 2、总结 1、执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 2、开发效率&…...
【玉米叶部病害识别】Python+深度学习+人工智能+图像识别+CNN卷积神经网络算法+TensorFlow
一、介绍 玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集(‘矮花叶病’, ‘健康’, ‘灰斑病一般’, ‘灰斑病严重’, ‘锈病一般’, ‘锈病严重’, ‘叶斑病一般’, ‘叶斑病严重’&#x…...
【设计模式】如何用C++实现依赖倒置
【设计模式】如何用C实现依赖倒置 一、什么是依赖倒置? 依赖倒置原则(Dependency Inversion Principle,DIP)是SOLID面向对象设计原则中的一项。它的核心思想是: 高层模块不应该依赖于低层模块,两者都应该…...
使用onnxruntime-web 运行yolov8-nano推理
ONNX(Open Neural Network Exchange)模型具有以下两个特点促成了我们可以使用onnxruntime-web 直接在web端上运行推理模型,为了让这个推理更直观,我选择了试验下yolov8 识别预览图片: 1. 跨平台兼容性 ONNX 是一种开…...
Gin框架html/vue前端使用hls.js播放/点播m3u8(hls)格式视频
说明 在web应用开发时遇到在线播放m3u8格式视频,由于m3u8是多分片视频,原生video标签无法直接播放,所以需要js对m3u8处理才能播放,网上有很多插件,这里我选择最近简单方法hls.js播放,引入一个js文件即可。…...
HarmonyOS 私仓搭建
1. HarmonyOS 私仓搭建 私仓搭建文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-ohpm-repo-quickstart-V5 发布共享包[https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-har-publish-0000001597973129-V5]…...
Mybatis学习笔记(二)
八、多表联合查询 (一) 多表联合查询概述 在开发过程中单表查询不能满足项目需求分析功能,对于复杂业务来讲,关联的表有几张,甚至几十张并且表与表之间的关系相当复杂。为了能够实业复杂功能业务,就必须进行多表查询,…...
Google“Big Sleep“人工智能项目发现真实软件漏洞
据Google研究人员称,该公司的一个人工智能项目足够聪明,能够自行发现现实世界中的软件漏洞;Google的人工智能项目最近在开源数据库引擎 SQLite 中发现了一个之前未知的可利用漏洞。 该公司随后在正式软件发布之前报告了这一漏洞,这…...
npm入门教程5:package.json
一、package.json 文件的作用 依赖管理:列出项目所依赖的包(库)及其版本,便于其他开发者或自动化工具快速安装和更新这些依赖。元数据描述:提供项目的描述、作者、许可证等元信息,有助于项目的管理和维护。…...
AI智能体集群如何革新代码审查:架构、实现与CI/CD集成
1. 项目概述:一个为代码审查提效的智能体集群如果你是一名团队的技术负责人或资深开发者,肯定对代码审查(Code Review)这个环节又爱又恨。爱的是,它是保证代码质量、促进知识共享的关键闸门;恨的是…...
AI写专著全攻略:从选题到完稿,AI工具帮你快速完成20万字专著!
学术专著的严谨性必须依靠大量的数据和资料,但资料的搜集和数据的整合却是写作中最为繁琐且耗时的部分。研究人员需要全面地收集国内外的前沿文献,这不仅包括确认文献的权威性和相关性,还有追溯原始出处,避免二次引用时的错误&…...
LabVIEW与单片机协同开发:构建可交互硬件原型的通信与事件驱动架构
1. 项目概述与核心思路上次我们聊了用LabVIEW制作一个“iPhone”的初步构想和界面设计,很多朋友反馈说对如何将虚拟界面与实际硬件联动起来特别感兴趣。这第二集,我们就来深入聊聊这块硬骨头——如何让LabVIEW这个强大的图形化编程工具,真正驱…...
学Simulink——交流微电网中双向DC-AC变换器的多模式切换仿真
目录 手把手教你学Simulink——交流微电网中双向DC-AC变换器的多模式切换仿真 一、背景与挑战 1.1 交流微网的“多面手”需求 1.2 核心痛点与多模式设计的“死穴” 二、系统架构与核心控制推导 2.1 整体架构:功率级与“三态”控制魔方 2.2 核心数学推导&#…...
从校赛到区域赛:ACM-ICPC竞赛中的经典算法与实战策略解析
1. ACM-ICPC竞赛与算法能力培养 ACM国际大学生程序设计竞赛(ACM-ICPC)是全球最具影响力的大学生计算机赛事,被誉为"计算机界的奥林匹克"。这项赛事不仅考验选手的编程能力,更注重算法设计、团队协作和心理素质的综合表现…...
GA/T 1400视图库实战:从零部署Easy1400平台到设备级联全流程解析
1. 初识GA/T 1400与Easy1400平台 第一次接触GA/T 1400标准时,我完全被各种专业术语绕晕了。简单来说,这是一套专门针对视频监控领域的行业标准,规定了视频图像信息在采集、传输、存储等环节的技术要求。而Easy1400就是基于这个标准开发的一套…...
终极D2DX宽屏补丁:让经典暗黑破坏神2在现代PC上完美重生
终极D2DX宽屏补丁:让经典暗黑破坏神2在现代PC上完美重生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还…...
别再死记硬背了!用这5个真实项目案例,彻底搞懂Python函数参数与返回值
别再死记硬背了!用这5个真实项目案例,彻底搞懂Python函数参数与返回值 函数是Python编程的基石,但很多初学者在学完基础语法后,面对实际项目依然无从下手。本文将通过5个真实开发场景,带你从"会用"到"懂…...
Go语言开源漏洞扫描器Abyss-Scanner:架构解析与CI/CD集成实践
1. 项目概述:一个为安全而生的开源漏洞扫描器最近在整理自己的开源项目工具箱,发现一个挺有意思的工具,叫 Abyss-Scanner。这名字起得挺有深意,“深渊扫描器”,听起来就有点探索未知、发现潜在风险的味道。简单来说&am…...
Windows平台QT BLE开发避坑指南:从环境搭建到稳定通信
1. Windows平台QT BLE开发环境搭建 在Windows平台上使用QT进行BLE开发,首先需要确保开发环境正确配置。我遇到过不少开发者因为环境问题卡在第一步,白白浪费好几天时间。这里分享几个关键点: 编译器选择是第一个坑。实测发现必须使用MSVC编译…...
