JavaWeb基础 -- Servlet

JavaWeb基础 – Servlet

1.Servlet简介

1.1 Servlet是什么

Servlet本身是用Java编写的,运行在Web服务器上的应用程序,并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据,并展示来自数据库或其他来源的数据。通常情况下,Servlet用于扩展HTTP协议的Web服务器。


2.Servlet运行机制

2.1 Servlet工作内容

  • 注册一个类:在Tomcat收到某个特定的HTTP请求时执行这个类中的一些功能。
  • 解析HTTP请求:把HTTP字符串解析为Request对象。
  • 构造HTTP相应:给指定Response对象填写相应字段,Servlet会根据该对象构造一个HTTP响应字符串,并通过Socket返回至客户端。

2.2 Servlet结构

alt text

2.3 工作原理

  • Servlet接口定义了Servlet与Servlet容器之间的规则。即Servlet容器将Servlet类载入内存,并产生Servlet实例以及调用的具体方法。需要注意的是一个应用程序中每种Servlet类型只能有一个实例
  • 用户请求时Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。这两个对象均由Servlet容器封装好的。
  • ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。
  • 对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

2.4 生命周期

对象的生命周期是从创建到销毁的整个过程,在Servlet容器中大致可以分为以下四个阶段:

  • 加载和实例化:当Servlet第一次被访问时,容器将会创建Servlet对象。有时创建 Servlet 是比较耗时的,那么第一次访问就比较耗费时间,用户体验比较差。Servlet 提供了解决这个问题的方法,通过具体的配置可以实现在服务器启动的时间来创建 Servlet 对象,提高了访问速度。
  • 初始化:Servlet实例化后,容器就会调用init()方法初始化这个对象,并完成配置文件的加载,创建链接等初始化工作。
  • 请求处理:每一次请求Servlet时,容器都会调用Service()方法对请求进行处理。
  • 服务终止:当需要释放内存或者是容器关闭时,容器都会调用 Servlet 的 destroy() 方法完成资源的释放,在 destroy() 方法调用之后,容器会释放实例化对象,随后被 Java 垃圾回收机制处理,该方法只会被调用一次。注意,此时的服务器关闭指的是正常关闭非强制关闭。

3.实例

3.1 简介

通过一个实际的创建流程了解Servlet是什么,怎么用。

3.2 实现过程

3.2.1 创建项目

这里使用Maven项目管理工具实现,首先导入Servlet依赖坐标

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

3.2.2 实现接口

定义一个类并实现Servlet接口,并重写所有方法

public class ServletDemo implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("Hello");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

3.2.3 配置路径

通过@WebServlet 注解,配置其访问路径。

@WebServlet("/index")
public class ServletDemo implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("Hello");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

3.2.4 启动服务器

启动服务器后即可在浏览器中查看当前配置完毕网页的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

InstantID: Zero-shot Identity-Preserving Generation in Seconds

https://arxiv.org/pdf/2401.07519#page9.73https://github.com/instantX-research/InstantID?tabreadme-ov-filehttps://github.com/instantX-research/InstantID/pull/89/files 问题引入 目标是生成和reference图片相符合的图片&#xff0c;特别是人脸&#xff1b;现在基于…

汽车耐老化太阳跟踪聚光户外加速老化试验

汽车耐老化太阳跟踪聚光户外加速老化试验方法是一种模拟太阳光照、热和潮湿环境条件下&#xff0c;测试汽车外饰材料耐老化性能的试验方法。此方法主要用于评估材料在遭受日光、热和潮湿影响下的相对耐老化性&#xff0c;以确定其在实际使用过程中的耐久性。 1. 范围 本标准适…

计算机类-本科毕业设计快速通关攻略-(选题-创新点-论文框架-论文绘图)

一、推荐选题 大多数人都没有什么基础&#xff0c;不推荐做系统类的&#xff0c;建议走深度学习方向&#xff0c;简单易上手&#xff0c;下面将给出几个我认为不错的方向。 1、目标检测类 目标检测是每年深度学习毕业设计的主流&#xff0c;如Faster R-CNN、YOLO、SSD等算法…

Linux网络配置和系统管理

Linux网络配置和系统管理 1.查看网络IP和网关windows系统主机 IP虚拟机 IP虚拟机网关网络检测命令 ping网络连接模式 2.配置静态IP地址(NAT网络连接模式)前提说明配置主机的VMware Network Adapter VMnet8 网卡静态IP地址注意点虚拟机配置静态ip修改后ping命令测试修改虚拟机静…

使用Rclone从Google Drive 下载大文件

前言 使用浏览器、或FDM、wget、curl等下载工具&#xff0c;从 Google Drive 下载大文件时经常会遇到中断或下载失败的情况&#xff0c;这一般是由于网络不稳定、Google Drive 的限制、或文件太大导致。 虽然使用 gdown 能一定程度避免上述问题&#xff0c;但对于非常大的文件…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 背景…

编写 prometheus exporter监控 mysql group replication

用 prometheus 监控 mysql&#xff0c;之前用 mysqld_exporter 收集mysql 的监控指标&#xff0c;发现并没有 mysql 组复制状态的指标。只能自己收集了&#xff0c;编写脚本收集指标推送到 pushgateway&#xff0c;这个办法更简单但是扩缩容不是很方便。下面用 python 编写的一…

kotlin

kotlin 多个耗时操作需拿上一个结果livedata按顺序执行 在Kotlin中&#xff0c;如果你想要按顺序执行多个耗时操作并获取上一个操作的结果&#xff0c;你可以使用LiveData和Transformations.switchMap来实现。以下是一个简化的例子&#xff1a; class MyRepository(private va…

LLM分布式预训练浅析

随着深度学习的不断进步&#xff0c;语言模型的规模越来越大&#xff0c;参数量级已经达到了数千亿甚至数万亿&#xff0c;参数规模的指数增长带来了两个巨大的挑战 1&#xff09;模型参数过大&#xff0c;如GLM 130B模型参数需要520GB&#xff08;130B*4bytes&#xff09;的显…

MDM监管锁系统租赁系统搭建教程

材料准备 使用公司资质申请苹果开发者账号 https://support.tuya.com/zh/help/_detail/Kam3pskapsytn 注意事项&#xff1a; 填写公司官网的时候 公司官网必须可以访问 且官网包含公司的 地址 联系方式 等信息 否则会被拒绝 申请苹果开发者的appleid 最好使用已经注册并使用一…

8.5 数据库基础技术-规范化

函数依赖 函数依赖公理系统

每日Attention学习15——Cross-Model Grafting Module

模块出处 [CVPR 22] [link] [code] Pyramid Grafting Network for One-Stage High Resolution Saliency Detection 模块名称 Cross-Model Grafting Module (CMGM) 模块作用 Transformer与CNN之间的特征融合 模块结构 模块思想 Transformer在全局特征上更优&#xff0c;CNN在…

Puppeteer Web 抓取:使用 Browserless 的 Docker

Docker 镜像介绍 Docker 镜像是用于在 Docker 容器中执行代码的文件。它类似于构建 Docker 容器的指令集&#xff0c;就像一个模板。换句话说&#xff0c;它们相当于虚拟机环境中的快照。 Docker 镜像包含运行容器所需的所有库、依赖项和文件&#xff0c;使其成为容器的独立可…

【Pytorch】生成对抗网络实战

GAN框架基于两个模型的竞争&#xff0c;Generator生成器和Discriminator鉴别器。生成器生成假图像&#xff0c;鉴别器则尝试从假图像中识别真实的图像。作为这种竞争的结果&#xff0c;生成器将生成更好看的假图像&#xff0c;而鉴别器将更好地识别它们。 目录 创建数据集 定…

前端宝典十一:前端工程化稳定性方案

一、工程化体系介绍 1、什么是前端工程化 前端工程化 前端 软件工程&#xff1b;前端工程化 将工程方法系统化地应用到前端开发中&#xff1b;前端工程化 系统、严谨、可量化的方法开发、运营和维护前端应用程序&#xff1b;前端工程化 基于业务诉求&#xff0c;梳理出最…

redhawk:STA timing data file解析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章:

PyTorch深度学习网络(一:MLP)

全连接神经网络&#xff0c;又称多层感知机&#xff08;MLP&#xff09;&#xff0c;是深度学习最基础的神经网络。全连接神经网络主要由输入层、隐藏层和输出层构成。本文实现了一个通用MLP网络&#xff0c;包括以下功能&#xff1a; 根据输入的特征数、类别数、各隐藏层神经…

以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加&#xff0c;这次是引入thymeleaf渲染引擎。 使用这个引擎的很多&#xff0c;主要是以下几个优点&#xff1a; Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显…

Vue3加vite使用Cesium绘制图形

Vue3加vite使用Cesium绘制图形 1、项目开发准备 Node版本&#xff1a;16.20.2 1.1创建一个新的工程&#xff1a;my-cesium-app npm create vitelatest my-cesium-app – --template vue1.2 安装Element Plus npm install element-plus --save // main.js import ElementPl…

【STM32】看门狗

看门狗&#xff0c;还没有别的地方用上&#xff0c;暂时还不清楚在实际应用中最多的场景是什么&#xff0c;我感觉是用来强制重启系统。 大部分图片来源&#xff1a;正点原子HAL库教程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 应用场景 1.1 解决…