【JavaEE】Servlet学后大汇总

news2024/9/21 1:45:06

JavaEE之Servlet

  • 一、WEB容器
  • 二、Servlet常用API和简单说明
  • 三、Servlet生命周期
    • Servlet对象是什么时候被创建的?
    • Servlet被称为假单例
    • 一个请求对应一个request和一个response
  • 四、Servlet属性设置——三个范围(请求、会话、应用)
  • 五、会话、过滤器

一、WEB容器

  • 什么是WEB容器

web容器干啥用的:

  1. 管理Servlet的生命周期;
  2. 维持浏览器和服务器之间的通信(对话);
  3. 加载web应用,处理请求。
  4. 多线程支持。

二、Servlet常用API和简单说明

Tomcat10jakarta,如果不是这个版本就是javax,本质没变.

jakarta.servletjakarta.servlet.http包表示servlet api 的接口和类。
jakarta.servlet包中包含servlet或容器使用的许多接口和类。这些接口不是特定于任何协议。
jakarta.servlet.http包中包含仅用于负责http请求的接口和类。

注:以下说的是一些常用的,并不是所有。
🙌jakarta.servlet包中的接口

Servlet
ServletRequest//service方法第一个参数
ServletResponse//service方法第二个参数
RequestDispatcher//请求转发对象
ServletConfig//Servlet配置信息
ServletContext//应用项目配置信息
Filter  //过滤器
FilterChain // doFilter方法中的一个参数类型,该实现是由所使用的Tomcat猫它实现的。当然也可以是别的服务器

🙌jakarta.servlet包中的类

GenericServlet//实现了Servlet接口的抽象类(适配器)
ServletException

🙌jakarta.servlet.http包中的接口

HttpServletRequest//继承了ServletRequest接口
//在ServletRequest接口方法外,还有getMethod(),getContextPath()等有用方法
HttpServletResponse//继承了ServletReponse接口
HttpSession//session会话,会话域对象

🙌jakarta.servlet.http包中的类

HttpServlet//继承了GenericServlet抽象类,HttpServlet也是一个抽象类
Cookie // 一种会话跟踪技术

HttpServlet不同于GenericServlet抽象类的地方是它享有Http协议
它使用了模块化设计,可以针对请求类型做出响应的操作,而这个是GenericServlet所达不到的。

三、Servlet生命周期

Servlet的生命周期可以分为几步来看:

  1. Tomcat小猫咪去web.xml文件中找对应的Servlet,然后通过反射对Servlet进行加载;
  2. 通过类对象创建出对应的Servlet对象(通过Servlet中的无参构造);
  3. 有了Servlet对象,然后调用里面的init方法进行初始化Servlet;此时ServletConfig对象被创建。
  4. 然后调用Servlet类的service方法;
  5. 最后调用destroy方法,在服务中删除Servlet实例之前,该方法使得Servlet有机会清理所有的资源,例如:内存,线程等等。

在这里插入图片描述

Servlet对象是什么时候被创建的?

  • 是首次向服务器发送请求的时候创建的。服务器是先判断内存中是否存在该Servlet对象,如果存在就直接调用service方法,不存在就执行上面四大步。
  • 那能否在打开服务器的时候就创建对象呢?
    可以的;在web.xml文件中配置< load-on-startup>(加载优先级) < /load-on-startup>
    如下图所示(未发送请求就创建好对象咯):
    在这里插入图片描述
  • 也可以通过 WebServlet 注解去进行设置;

在这里插入图片描述

Servlet被称为假单例

我们所知道的单例都是把构造方法给私有,然后通过方法获取实例对象,但Servlet构造方法仍然是可以用的,但它在服务器出现的次数是一次的,所以说它是假单例。
如何验证?
通过init方法服务器调用的次数就可以简单验证了,当然最准确的验证是在Servlet构造方法中输出个东西,反复的发送请求看看构造方法中的输出语句会不会反复执行?
服务器中init方法只执行一次,当重复发送请求的时候,是先检验内存中是否有该对象,如果存在就直接调用service方法,并不会反复的去创建Servlet对象。

一个请求对应一个request和一个response

四、Servlet属性设置——三个范围(请求、会话、应用)

  • request(对应的类名:ServletRequest
    请求域(请求级别的)
  • session(对应的类名:HttpSession
    会话域(用户级别的)
  • application(对应的类名:ServletContext
    应用域(项目级别的,所有用户共享的)
    这三个域对象的大小关系:request<session<application
    他们三个域对象都有以下四个公共的方法:
void setAttribute(String name,Object obj)//向域中绑定数据
Object getAttribute(String name)//获取域中的数据
void removeAttribute(String name)//删除域中的数据
Enumeration< String> getAttributeNames()//得到域中所有数据对应的name

使用规则:尽量使用小的域
注:
HttpServletRequest是ServletRequest的一个子接口

getContextPath
getSession
getServletPath
getMethod
.....等好用的方法是在HttpServletRequest

五、会话、过滤器

可以看看下面这些博客了解,Servlet 中的会话机制和过滤器(采用了责任链设计模式设计的)

Session会话机制
Cookie会话
Filter过滤器

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

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

相关文章

每日学术速递2.20

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Boundary Guided Mixing Trajectory for Semantic Control with Diffusion Models 标题&#xff1a;用于扩散模型语义控制的边界引导混合轨迹 作者&#xff1a;Ye Zhu, Yu Wu, Zhi…

Android 开发布局笔记01 控件

Relative Layout 前端界面代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools&qu…

数据结构与算法(Java版) | 线性结构和非线性结构

之前&#xff0c;我们说过&#xff0c;数据结构是算法的基础&#xff0c;因此接下来在这一讲我就要来给大家重点介绍一下数据结构了。 首先&#xff0c;大家需要知道的是&#xff0c;数据结构包括两部分&#xff0c;即线性结构和非线性结构。知道这点之后&#xff0c;接下来我…

flex一把梭

flex 使用display:flex&#xff0c;可以让一个元素变成弹性容器&#xff08;flex容器&#xff09;&#xff0c;该元素中的直接子元素成为弹性项&#xff08;flex项&#xff09; flex-direction 使用flex-direction可以控制flex容器的主轴的方向&#xff1a;垂直&#xff08;…

躬身入局,干货分享,2023年春招后端技术岗(Python)面试实战教程,Offer今始为君发

早春二月&#xff0c;研发倍忙&#xff0c;杂花生树&#xff0c;群鸥竟飞。为什么&#xff1f;因为春季招聘&#xff0c;无论是应届生&#xff0c;还是职场老鸟&#xff0c;都在摩拳擦掌&#xff0c;秣马厉兵&#xff0c;准备在面试场上一较身手&#xff0c;既分高下&#xff0…

Allegro如何让测量时显示双单位操作指导

Allegro如何让测量时显示双单位操作指导 在用Allegro做PCB设计的时候,时常会需要使用到测量命令,通常显示的一个单位,比如mil,如下图 当希望除了看到mil单位的值,又同时能够看到mm单位的值,省去换算的时间 具体设置如下 点击Setup点击User Preference

Linux服务:Nginx服务部署及基础配置

目录 一、Nginx介绍 1、Nginx简介 2、I/O模型相关概念 3、Nginx事件驱动模型 二、部署Nginx 1、yum部署Nginx 2、编译安装Nginx 三、Nginx使用 1、基础使用 2、nginx信号 四、web服务选择及优化 1、Nginx与Apache对比 2、Nginx服务调优 一、Nginx介绍 1、Nginx简…

SAP ABAP

方法一&#xff1a; REPORT ZDCH_09_TEST2. ************************************************************************ * DATEN DEFINITION * *********************************************************************…

【数据结构】二叉树-堆实现及其堆的应用(堆排序topK问题)

文章目录一、堆的概念及结构二、堆的实现1.结构的定义2.堆的初始化3.堆的插入4.堆的向上调整5.堆的删除6.堆的向下调整7.取出堆顶元素8.返回堆的元素个数9.判断堆是否为空10.打印堆中的数据11.堆的销毁三、完整代码1.Heap.h2.Heap.c3.test.c四、堆排序1.堆排序2.建堆3.选数4.完…

Shopee、ebay、亚马逊等跨境卖家了解测评的一篇干货

随着时代的发展&#xff0c;大家越来越喜欢网购&#xff0c;国外也有亚马逊、沃尔码、阿里国际、速卖通、ebay、shopee、Lazada、ozon、temu等等&#xff0c;而国外这些平台也有很大的市场&#xff0c;跨境电商也随时诞生&#xff0c;而当今社会环境实体生意越来越难做&#xf…

DAMA认证|数据治理产业上规模需要做到“三化”

数据治理是开启数据安全体系化建设的第一步&#xff0c;需要从产业层面做大做强&#xff0c;支撑数据安全整体框架&#xff0c;为数据流通提供安全保障&#xff0c;推动促进数字化产业进一步发展。 规模化发展是数据治理产业的瓶颈&#xff0c;行业数字化业务的复杂性和过多的定…

k8s安装tekton,编写task

文章目录一、官方安装二、国内资源安装安装tekton安装dashboard安装CLI三、demo编写task.yaml编写taskRun.yaml使用tkn命令查看参考文章一、官方安装 地址&#xff1a;https://tekton.dev/docs/installation/pipelines/#installing-tekton-pipelines-on-kubernetes 注意&#…

Spring MVC 源码之MultipartResolver 组件

MultipartResolver 组件&#xff0c;内容类型( Content-Type )为 multipart/* 的请求的解析器&#xff0c;主要解析文件上传的请求。例如&#xff0c;MultipartResolver 会将 HttpServletRequest 封装成 MultipartHttpServletRequest 对象&#xff0c;便于获取参数信息以及上传…

【NVMEM子系统】二、NVMEM驱动框架

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;文章目录1、前言2、驱动框架3、源码目录结构4、用户空间下的目录结构1、前言 NVMEM SUBSYSTEM&#xff0c;该子系…

视频片段怎么做成gif图?快试试这2种方法

动态gif图片作为当下非常常用的表情包&#xff0c;其丰富的内容生动的画面深受大众喜爱。那么&#xff0c;当我们想要将电影或是电视剧中的某一片段做成gif动态图片的时候&#xff0c;要如何操作呢&#xff1f;接下来&#xff0c;给大家分享两招视频转化gif的小窍门–使用【GIF…

【力扣-Python-1】两数之和(easy)

https://leetcode.cn/problems/two-sum/题目描述给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答…

uboot下实现U盘自动升级程序的思路分析(基于USB系统、eMMC系统、FAT32文件系统)

1、常见的升级方式 1.1、应用程序升级 优点&#xff1a;在图形化界面操作&#xff0c;只需要选中升级文件并点击升级即可&#xff0c;操作简单&#xff1b; 缺点&#xff1a;应用程序必须能正常启动&#xff0c;当程序出现bug就不能升级&#xff0c;可靠性差&#xff1b; 总结…

旺店通与金蝶云星空对接集成采购入库单接口

旺店通旗舰奇门与金蝶云星空对接集成采购入库单查询连通销售退货新增V1(12-采购入库单集成方案-P)数据源系统:旺店通旗舰奇门旺店通是北京掌上先机网络科技有限公司旗下品牌&#xff0c;国内的零售云服务提供商&#xff0c;基于云计算SaaS服务模式&#xff0c;以体系化解决方案…

Prometheus集群分布式架构浅析

集群行为是一种常见于自然界中鱼群、鸟群、蜂群等低等群居生物的集体行为&#xff0c;受此启发形成了无人机集群的概念。无人机集群不是多无人机间的简单编队&#xff0c;而是通过必要的控制策略使之产生集群协同效应&#xff0c;从而具备执行复杂多变、危险任务的能力。目前无…

【C++】AVLTree——高度平衡二叉搜索树

文章目录一、AVL树的概念二、AVL树节点的定义三、AVL树的插入四、AVL树的旋转1.左单旋2.右单旋3.左右双旋4.右左双旋五、进行验证六、AVLTree的性能个人简介&#x1f4dd; &#x1f3c6;2022年度博客之星Top18;&#x1f3c6;2022社区之星Top2;的&#x1f947;C/C领域优质创作者…