当前位置: 首页 > news >正文

JavaWEB必知必会-Servlet

目录

  1. Servlet简介
  2. Servlet快速入门
  3. Servlet配置详解
  4. ServletContext

1 Servlet简介

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API动态的向客户端输出内容

javaWeb规范(三大组件):包含三个技术点
1)servlet技术
2)filter技术—过滤器
3)listener技术—监听器

2 Servlet快速入门

2.1 入门案例

2.1.1 实现Servlet接口步骤

1)创建类实现Servlet接口
2)覆盖尚未实现的方法

3)在web.xml进行servlet的配置

2.1.2 servlet对象如何被创建?

2.1.3 访问流程图解


但在实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多,我们一般创建类继承HttpServlet.

2.2 HttpServlet

2.2.1 继承HttpServlet原理图解:

2.2.2 实现步骤

1)创建类继承HttpServlet类
2)覆盖doGet和doPost

3)在web.xml中进行servlet的配置

3 Servlet的配置详解

3.1 基本配置

其中url-pattern的配置方式:
1)完全匹配 访问的资源与配置的资源完全相同才能访问到

2)目录匹配 格式:/虚拟的目录…/*

3)扩展名匹配 格式:.扩展名

注意:第二种与第三种不要混用 **/web/
.action(错误的),服务器启动报错.**

3.2 服务器启动实例化Servlet配置

Servlet的何时创建:默认第一次访问时创建.当在servlet的配置时,加上一个配置 servlet对象在服务器启动时就创建.

在中配置中给出一个非负整数,一般不写1,Tomcat有个默认的1.多个Servlet的创建顺序按照给出的非负整数从小到大排序.

3.3 缺省的Servlet

可以将url-pattern配置一个/,代表该servlet是缺省的servlet.当你访问资源地址所有的servlet都不匹配时,缺省的servlet负责处理.

缺省Servlet除了处理动态资源url不匹配,静态资源的路径不匹配也由它处理.

3.4 欢迎页面


当我们访问day07这个项目的时候,就默认在webContext下找day07.html

4 ServletContext对象

4.1 什么是ServletContext对象

ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息,ServletContext对象一个web应用只有一个

4.2 ServletContext生命周期

  • 创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))
  • 销毁:web应用被卸载(服务器关闭,移除该web应用)

简称与天地同寿.

4.3 怎样获得ServletContext对象

我们可以通过两种方式获取ServletContext对象
1)ServletContext servletContext = config.getServletContext();
在init(ServletConfig config)方法中获取.但一般不用.
2)ServletContext servletContext = this.getServletContext();
在GenericServlet或HttpServlet及其子类中通过this获取.这个常用.

4.4 ServletContext的作用

4.4.1 获得web应用全局的初始化参数

在web.xml中配置初始化参数

通过context对象获得参数

4.4.2 获得web应用中任何资源的绝对路径

方法:String path = context.getRealPath(相对于该web应用的相对地址);

结果返回资源在磁盘的绝对路径:

4.4.3 ServletContext是一个域对象

4.4.3.1 域对象说明

存储数据的区域就是域对象.JavaWeb有四大域对象,按作用于范围从小到大排列:

PageContext

作用范围是整个JSP页面,是四大作用域中最小的一个;生命周期是当对JSP的请求时开始,当响应结束时销毁。

ServletRequest

作用范围是整个请求链(请求转发也存在);生命周期是在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

HttpSession

作用范围是一次会话。生命周期是在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate() ,可以立即销毁session。

ServletContext

作用范围是整个Web应用。当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

4.4.3.2 域对象的通用的方法:

  • setAtrribute(String name,Object obj); — 设置属性
  • getAttribute(String name); — 获取属性
  • removeAttribute(String name); — 移除属性

设置的属性,其实是存放在一个Map中.这个Map的名字叫attributes. 是ServletContext接口实现类ApplicationContext的一个属性.

4.4.3.3 案例

记录网站的访问次数.

相关文章:

JavaWEB必知必会-Servlet

目录 Servlet简介Servlet快速入门Servlet配置详解ServletContext 1 Servlet简介 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码&a…...

oralce查找返回不同的值,寻找不同的表(原创)

查找返回不同的值,寻找不同的表 select case a_id when 1 then (select b_id|| ||b_desc from b where b.b_ida.a_id) else (select e_id || ||e_desc from e where e.e_ida.a_id) end from a; 以上方法的缺陷是单表,判断。今天来了个挑战&#…...

Python-第四天 Python循环语句

Python-第四天 Python循环语句一、while循环1.while循环的基础语法2.while循环的基础案例3.while循环的嵌套应用4.while循环的嵌套案例二、for循环1.for循环的基础语法1.1基础语法1.2 range语句2.for循环的嵌套应用三、循环中断 : break和continue1.continue2.break四、 综合案…...

spring中bean的生命周期(简单5步)

目录 一、概念 1.生命是bean的生命周期? 2.知道bean生命周期的意义? 3.bean的生命周期按照粗略的五步 二、例子讲解 一、概念 1.生命是bean的生命周期? 答:spring其实就是管理bean对象的工厂,它负责对象的创建&…...

10 个最难理解的 Python 概念

文章目录技术提升面向对象编程 (OOP)装饰器生成器多线程异常处理正则表达式异步/等待函数式编程元编程网络编程大家好,与其他编程语言相比,Python 是一门相对简单的编程语言,如果你想真正学透这门语言,其实可能并不容易。 今天我…...

【linux】线程概念

概念 什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列” 一切进程至少都有一个执行线程,线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中&a…...

Leg转Goh引擎和架设单机+配置登陆器教程

教程准备1、Leg版本一个2、Goh引擎一套3、电脑一台(最好联网)前言:BLUE/LEGS/Gob/Goh/九龍、4K、AspM2第一步:更换引擎1、把版本自带的LEG引擎换成Goh引擎2、删除服务端里面的exe、dll文件(也可以直接更新)3、清理登录和游戏网关里面的配置文件4、更新引…...

idea整合svn

idea整合svn svn下载 链接:https://pan.baidu.com/s/1yS3R3lEE8lm9c9Ap-ndDKg 提取码:65ur 基础步骤 IDED中配置SVN没有svn.exe解决办法 以下是两种解决方案 需要卸载原 svn(不推荐) 参考网址: https://blog.csdn.…...

字节青训前端笔记 | 数据可视化基础

本课程主要内容可以分为三个章节: 数据可视化的基本概念可视化设计的基本原则面向前端的可视化工具 本手册可以作为学生学习数据可视化的“学习指南”,按照手册所列内容,结合扩展资料进行系统的学习和实践。本课程没有讨论更为前沿的可视化…...

ROS运行机C++程序,移动

流程: 1.创建工作空间 mkdir catkin_ws cd catkin_ws mkdir src cd src catkin_init_workspace 2编译工作空间 cd ~/catkin_ws/ catkin_make catkin_make install 首先对ROS进行创建一个元功能包 3.设置环境变量 source devel/setup.bash source devel/setup.b…...

C++中编译静态库与动态库

1.库的理解库就是写好的现有的,成熟的,可复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,是预编译代码的集…...

shell中sed命令用法

一、sed命令解析 1、sed工具概述 Stream EDitor,流式编辑器 - 非交互,基于模式匹配过滤及修改文本 - 逐行处理,并将结果输出到屏幕 - 可实现对文本的输出、删除、替换、复制、剪切、导入、导出等操作 2、命令格式解析 主要用法: …...

【VictoriaMetrics】VictoriaMetrics启停脚本

先看结果,启动VictoriaMetrics UI界面可访问...

高性能网络SIG月度动态:SMC 与 IBM 就扩展协议达成一致,virtio 支持 XDP 新特性

高性能网络 SIG(Special Interest Group) :在云计算时代,软硬件高速发展,云原生、微服务等新的应用形态兴起,让更多的数据在进程之间流动,而网络则成为了这些数据流的载体,在整个云时…...

【正点原子FPGA连载】第七章程序固化实验摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

第七章程序固化实验 在前面的几个实验中,我们都是通过JTAG接口将FPGA配置文件和应用程序下载到MPSOC器件中。接下来我们将尝试把程序存储在非易失性存储器中,在上电或者复位时让程序自动运行,这个过程需要启动引导程序(Boot Load…...

LeetCode-2335. 装满杯子需要的最短总时长【贪心,数学】

LeetCode-2335. 装满杯子需要的最短总时长【贪心&#xff0c;数学】题目描述&#xff1a;解题思路一&#xff1a;其实像一道数学题目。假设三个杯子x<y<z先分两种情况。第一种&#xff1a;xy<z&#xff0c;答案直接是最大的z。第二种&#xff1a;xy>z。先将x与y互相…...

基于 oss 框架的音频驱动

基于 oss 框架完成系统平台音频驱动的适配。 oss 框架可被多个平台应用&#xff0c;因此 oss 提供 OS 目录来存放平台文件&#xff08;比如&#xff1a;linux.c&#xff09;&#xff0c;该文件主要提供平台对 oss 框架封装后的相关接口。 以 Linux 为例&#xff0c;入口接口为…...

【golang】如何定制化zap日志库以及如何使用

Zap 日志 前言 本文主要介绍Go语言日志库如何简易定制化&#xff0c;以及如何在开发中使用。 为什么需要日志? 一个产品的诞生一定是因为有需求&#xff01;新技术大部分都是为了更加便利和实用而诞生的&#xff0c;日志也不例外。日志顾名思义就是对整个项目的事件进行记…...

如何将 Ubuntu 升级到 22.04 LTS Jammy Jellyfish

在本教程中,我们将详细介绍如何将你的 Ubuntu 系统升级到版本 22.04 Jammy Jellyfish,这是最新的长期支持版本。 Ubuntu 22.04 LTS Jammy Jellyfish 将于 2022 年 4 月 21 日发布。它是下个两年一次的长期支持(LTS)版本,因此值得注意,而且现在 Ubuntu 21.10 的用户可以升…...

ubuntu20.04安装docker与docker-compose

安装docker 查看系统发行版本 cat /proc/version1、更新apt包 sudo apt-get update2、安装必备的软件包以允许apt通过 HTTPS 使用存储库&#xff08;repository&#xff09;&#xff1a; sudo apt-get install ca-certificates curl gnupg lsb-release3、添加Docker官方版本…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...