JavaWeb基础 -- Servlet

news2024/11/25 6:47:04

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 {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

3.2.3 配置路径

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

@WebServlet("/index")
public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

3.2.4 启动服务器

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

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

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

相关文章

iOS 修改 tabbar 图标大小 01

0x00 transform 在点击 tabbar 时&#xff0c;通过修改图片的 transform 属性&#xff0c;来修改图片大小。 遍历 self.tabBar.subviews 来查找 图片。 imageView.transform CGAffineTransformScale(imageView.transform, 4, 4); 你会发现&#xff0c;根本改不动&#xff01…

CSS知识点详解:div盒子模型

盒子模型&#xff1a; 边框&#xff1a; border-color&#xff1a;边框颜色 border-width&#xff1a;边框粗细 1.thin 2.medium 3.thick 4.像素值 border-width:5px ; border-width:20px 2px; border-width:5px 1px 6px; border-width:1px 3px 5px 2px; 这个简写属性…

豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!

今天我们所处的时代是信息化时代&#xff0c;是数据驱动的人工智能时代。在人工智能、物联网时代&#xff0c;万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策&#xff0c;从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代&#…

Python导出所有已安装包及其版本信息

目录 导出导入 如果使用了虚拟环境&#xff0c;则先激活当前项目虚拟环境 venv\Scripts\activate导出 在当前目录下生成一个requirement.txt文件&#xff0c;记录当前环境的所有pyhton依赖包及其版本信息。 pip freeze > requirement.txt导入 pip install -r requiremen…

C语言手撕实战代码_循环单链表和循环双链表

C语言手撕实战代码_循环单链表和循环双链表 循环单链表习题1.建立带头结点的循环链表2.设计一个算法&#xff0c;将一个带有头结点的循环单链表中所有结点的链接方向逆转3.设计一个算法,将一个循环单链表左移k个结点4.设计一个算法将循环单链表中的结点p的直接前驱删除5.设计算…

如何使用 Higress 快速构建 AI 应用?

随着 AI 时代到来&#xff0c;基于大模型的应用对网关提出了新的要求&#xff0c;例如在不同 LLM 提供商之间进行负载均衡、构建 AI 应用的可观测能力、基于 token 的限流保护与配额管理、AI 应用内容安全等等。Higress 基于企业内外的丰富场景沉淀了众多面向AI的功能&#xff…

pip3 : 无法将“pip3”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

1.找到python安装目录底下的Scripts&#xff0c;复制该路径&#xff1a;你安装python的目录\Scripts 我本地的&#xff1a;D:\devSoftware\python-all\Python39\Scripts 2.将该路径配置到环境变量Path里面 我的电脑 - 右键属性 - 系统 - 环境变量 - 找到path点击编辑 - 新建&a…

家用超声波清洗机哪个品牌好用?实测解析四大高口碑超声波清洗机机型

提到超声波清洗机&#xff0c;很多人可能首先想到的是眼镜店或首饰店里的商用清洗设备。它们虽然功能强大&#xff0c;但价格较高且体积较大&#xff0c;并不适合家用。不过&#xff0c;现在有了一个更方便的选择&#xff1a;小型超声波清洗机。它们体积小巧&#xff0c;价格也…

9.cmake(string)

目录 1. 基本用法 2. string对于json的操作 3.代码段 1. 基本用法 以下通过截取字符串"begin test cmake string end "中的子串"test cmake string"来串联string中的部分用法&#xff0c;其中包括了FIND&#xff0c;LENGTH&#xff0c;SUBSTRING&#x…

linux搭建ceph集群

linux三节点搭建ceph集群 主机IP主机名称172.26.50.75node1172.26.50.112node2172.26.50.228node3 ceph-mon&#xff0c;ceph-mgr&#xff0c;ceph-mds都搭建在node1上&#xff0c;node2和node3上搭建ceph-osd&#xff0c;每个机器1个osd Ceph是一个分布式的存储系统&#x…

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

个人博客系统-自动化测试

1、项目背景 1.1技术背景 1&#xff09;个人博客系统主要是通过前端&#xff08;HTMLcssjs&#xff09;后端&#xff08;SpringBoot&#xff09;实现的一个博客的基本功能。前端通过jQuery的方式向后端请求数据。后端通过MyBatis从数据库中查询数据响应给前端。 2&#xff0…

天通报警呼叫柱助力宜宾——破汛期河心洲岛通信困境,守护人民群众生命安全

随着主汛期的到来&#xff0c;我国多地遭遇频繁降雨&#xff0c;强降雨或连绵不断的降雨&#xff0c;极易引发山洪、滑坡、泥石流等次生灾害。8月18日23时至20日10时&#xff0c;辽宁省西部地区出现暴雨到大暴雨&#xff0c;葫芦岛市部分乡镇出现特大暴雨。受到强降雨影响&…

Qt-QWidget的windowIcon属性(14)

目录 描述 相关API 使用 并不需要在堆上创建 不要带中文路径 运行观察 不要使用绝对路径 描述 这个其实就是你打开窗口的左上角那个图标&#xff0c;这个就是用来设置那个的 相关API 使用 创建一个新的项目&#xff0c;如下&#xff0c;添加一个设置图片的代码 并不需…

uboot中 fastboot udp 协议分析

注&#xff1a; 1. 本文所分析的fastboot源码不是android下的源码&#xff0c;而是恩智浦芯片厂商在IMX6UL芯片的uboot源码中自己实现的源码&#xff0c;二者不同&#xff0c;请读者注意区分。一些图片是网上找到的&#xff0c;出处不好注明&#xff0c;请见谅。 2. 分析fastbo…

VM——轮廓/快速匹配中的多模版匹配

1、轮廓或者快速匹配中支持建立多个模型&#xff0c;按照从上而下的顺序进行匹配&#xff0c;匹配上了即停止后续模版的匹配。 2、如果要多个模版都参与匹配&#xff0c;则需要打开“全部搜索模式”。 3、延拓阈值 “延拓阈值”&#xff0c;看参数名字不知所云&#xff0c;文档…

CR-NeRF 代码eval.py解析

这段代码是一个用于CR-NeRF&#xff08;Neural Radiance Fields&#xff09;模型的推理脚本。它主要用于生成和保存渲染的图像&#xff0c;并计算图像质量的评价指标&#xff08;如PSNR和SSIM&#xff09;。以下是对这段代码的详细解析&#xff1a; &#xff08;1&#xff09;…

【亚马逊云科技】有手就能做到的Amazon Lightsail快速建站

文章目录 前言一、为什么选择Amazon Lightsail二、创建账号与登录注册亚马逊账号登录控制台 三、创建Amazon Lightsail进入控制台创建实例实例配置查看实例查看网站定制页面 总结 前言 不论是个人名片还是官方网站都离不开网站建设工作。计算机技术经历漫长的发展&#xff0c;…

2024年如何将低质量视频变成高质量视频

创建低质量的视频对您没有好处&#xff0c;尤其是当您打算将这些视频上传到社交媒体帐户时。观众不喜欢观看模糊和低质量的视频&#xff0c;而这个东西没有意义&#xff0c;不会为你的内容增加价值。 那么&#xff0c;您应该如何确保您的社交媒体观众喜欢您的视频内容呢&#x…

企业内部知识库意义何在?怎么搭建?

引言 在知识经济时代&#xff0c;企业竞争力的核心日益转向知识的管理与应用能力。随着企业规模的扩大和业务复杂性的增加&#xff0c;如何高效地收集、整理、存储并分享内部知识&#xff0c;成为了企业持续发展和创新的关键。企业内部知识库应运而生&#xff0c;它不仅帮助企…