Servlet概述(Ⅰ)

目录

一、Servlet概述

演示

创建JavaWeb项目(2017版本为例)

1. 打开 IntelliJ IDEA

2. 选择项目类型

3. 配置框架

二、Servlet初识(熟练)

1.servlet说明

2.Servlet 接口方法

3.创建Servlet

4.JavaWeb请求响应流程

​编辑

​编辑

5.servlet生命周期

Servlet 基础

Servlet 接口方法

Servlet 生命周期

Servlet 实例管理

Tomcat 的角色

总结

三、HttpServlet(精通)

1.HttpServlet介绍

2.Http请求方法

 3.​​​​​​​创建HttpServlet

第一种:创建一个类继承HttpServlet

第二种:IDEA直接创建servlet

4.servlet创建顺序

总结


一、Servlet概述

JavaWeb 三大组件Servlet、Filter(过滤器)、Listener(监听器)。

其中Servlet是JavaWeb三大组件之一,它是我们学习JavaWeb最为基本的组件,必须100%掌握。

Servlet 作用:处理用户请求。客户端请求由 Tomcat 找到对应的 Servlet 来处理,例如登录请求由登录 Servlet 处理。

 【基本流程:JavaWeb项目部署在Tomcat,Tomcat启动就会立即加载web.xml,每写一个Servlet,就会在web.xml里面配置一个servlet】

接下来用idea创建JavaWeb项目来演示一下:

演示

创建JavaWeb项目(2017版本为例)

1. 打开 IntelliJ IDEA

启动 IntelliJ IDEA 2017,并选择 “Create New Project” 来创建一个新的项目。

2. 选择项目类型

在创建项目时,选择 “Java Enterprise” 模板。这是用于创建 Java Web 项目的模板。

在左侧栏中选择 “Java Enterprise”

在右侧的选项中,确保选中 “Web Application” 功能模块(即勾选 “Web Application”)。

3. 配置框架

普通JavaWeb项目架构:

MyJavaWebProject/
├── src/                # Java 源代码
├── web/                # Web 资源
│   ├── WEB-INF/        # Web 应用配置
│   │   └── web.xml     # 部署描述符
│   └── index.jsp       # 默认页面
└── lib/                # 依赖的 JAR 文件

所以是需要我们手动去配置WEB-INF目录和web.xml文件:
 

这里web.xml里面的约束也需要我们手动添加(由于web.xml里面的约束都是一样的,所以我们可以去直接复制任意其他项目里web.xml里的约束来用)

 在这里提供了3.1版本的约束:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1">
</web-app>

部署tomcat:

 

如果以前没有设置过的话请参见这篇博客中的步骤:部署JavaWeb项目(Ⅱ)-CSDN博客

运行项目:

项目会先加载web.xml文件,然后显示的下面结果是默认存在的index.jsp(由于没做任何编写处理,所以这里显示的是初始的界面内容。)

题外话 :

因为2017版本的idea版本较低,所以像maven这种架构的项目里面的基础目录并不会自动生成,需要手动添加。

如下是maven的架构:

MyJavaWebProject/
├── src/
│   ├── main/
│   │   ├── java/          # 存放 Java 源代码
│   │   ├── resources/     # 存放资源文件(如配置文件)
│   │   └── webapp/        # 存放 Web 资源(如 JSP、HTML、CSS)
│   │       ├── WEB-INF/   # Web 应用配置
│   │       │   └── web.xml
│   │       └── index.jsp
└── lib/                 # 存放依赖的 JAR 文件

配置项目结构

在 IntelliJ IDEA 中,需要手动配置这些目录的用途:

打开项目结构设置

  1. 点击 “File” > “Project Structure”(快捷键:Ctrl + Alt + Shift + S)。

  2. “Project Settings” 中,选择 “Modules”

配置目录用途

“Sources” 标签页中:

  • src/main/java 标记为 “Sources”(蓝色)。

  • src/main/resources 标记为 “Resources”

  • src/main/webapp 标记为 “Resources”

如果没有 src/main/webapp 目录,可以手动创建:

  • 右键点击 src/main,选择 “New” > “Directory/Package”,并命名为 webapp

  • 然后在 “Project Structure” 中将其标记为 “Resources”

当然,上面是maven架构的手动配置情况,而我们在此演示的JavaWeb用不到这么多。

二、Servlet初识(熟练)

1.servlet说明

定义:Servlet 是运行在 Web 服务器(如 Tomcat)中的小型 Java 程序,用于处理通过 HTTP 协议接收到的客户端请求。

实现:Servlet 需要实现 javax.servlet.Servlet 接口,并在 web.xml 文件中进行部署,以便 Web 服务器能够识别和调用。

2.Servlet 接口方法

javax.servlet.Servlet 接口定义了以下五个方法,用于控制 Servlet 的生命周期和请求处理:

方法签名描述调用时机
void init(ServletConfig config)初始化 Servlet 实例。用于执行 Servlet 的初始化工作。Servlet 实例被创建后立即调用一次。
void service(ServletRequest req, ServletResponse res)处理客户端请求。负责接收请求和返回响应。每次处理请求时调用。
void destroy()销毁 Servlet 实例。用于释放资源和执行清理工作。Servlet 实例被销毁前调用一次。
ServletConfig getServletConfig()获取 Servlet 配置信息。返回一个 ServletConfig 对象。需要时调用,通常在 init() 方法中保存。
String getServletInfo()获取 Servlet 信息。返回一个描述 Servlet 的字符串。需要时调用,通常用于获取 Servlet 描述。

引申问题:什么是初始化?

一个“一开始就要干的事”,e.g 进游戏前的登录 e.g 去自习室时开灯(不管是谁都要先完成的动作),那么就将这个方法编写进初始化里面,即一调用这个类,初始化里的方法就会完成。

3.创建Servlet

第一步:常见HelloServlet实现Servlet的接口,实现接口中的方法;

package cn.tx.servlet;import javax.servlet.*;
import java.io.IOException;public class Servlet1 implements Servlet { //实现servlet接口@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

第二步:配置servlet的访问路径;

在约束里面编写:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>hello</servlet-name><servlet-class>cn.tx.servlet.Servlet1</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>

4.JavaWeb请求响应流程

 接着:

当 Tomcat 接收到请求(如 http://localhost:8080/servlet_pro/logon),它会查找项目中的 web.xml 文件,通过请求路径(如 /logon)匹配 <url-pattern> 来定位相应的 Servlet。

Tomcat 找到匹配的 <servlet-mapping>,确定 <servlet-name>(如 login)。

根据 <servlet-name>,在 <servlet> 配置中找到对应的 <servlet-class>(如 com.rl.servlet.LoginServlet)。

接下来:

如果 Servlet 实例已存在,Tomcat 直接使用它处理请求。

如果不存在,Tomcat 通过反射创建实例,并将其存入 Servlet 池中,然后调用 service() 方法处理请求。

5.servlet生命周期

Servlet 基础

  • 定义:Servlet是服务器端的Java程序,用于处理HTTP请求和生成响应。

  • 接口:必须实现javax.servlet.Servlet接口。

  • 部署:需要在web.xml文件中配置,以便Tomcat等服务器识别和调用。

Servlet 接口方法

Servlet接口包含以下三个核心方法,定义了Servlet的生命周期:

  1. init(ServletConfig config)

    • 作用:初始化Servlet。

    • 生命周期:在Servlet实例创建后调用一次。

  2. service(ServletRequest request, ServletResponse response)

    • 作用:处理客户端请求。

    • 生命周期:每次请求时调用。

  3. destroy()

    • 作用:销毁Servlet实例。

    • 生命周期:在Servlet实例销毁前调用一次。

Servlet 生命周期

Servlet的生命周期由以下三个阶段组成:

  1. 初始化阶段:调用init()方法进行初始化。

  2. 请求处理阶段:调用service()方法处理客户端请求。

  3. 销毁阶段:调用destroy()方法进行销毁。

Servlet 实例管理

  • 实例创建:默认情况下,Servlet实例在第一次被请求时由Tomcat创建。

  • 实例销毁:当Tomcat决定不再需要Servlet实例时(如服务器关闭或重新部署应用),会销毁实例。

Tomcat 的角色

Tomcat作为Servlet容器,负责以下任务:

  • 创建、调用和销毁Servlet实例。

  • 调用Servlet的生命周期方法(init()service()destroy())。

  • 管理Servlet的生命周期和请求处理。

总结

Servlet的生命周期由Tomcat管理,开发者通过实现javax.servlet.Servlet接口中的方法来控制Servlet的行为。开发者需要关注的主要方法是init()service()destroy(),这些方法在Servlet的生命周期中由Tomcat自动调用。开发者需要在web.xml中配置Servlet,以便Tomcat能够识别和调用。

三、HttpServlet(精通)

1.HttpServlet介绍

因为现在我们的请求都是基于HTTP协议的,所以我们应该专门为HTTP请求写一个Servlet做为通用父类。

 由上图我们可以看出,以后再写Servlet 可以直接继承HttpServlet

  • Servlet   一个标准
  • GenericServlet  是Servlet接口子类
  • HttpServlet  是GenericServlet子类,一个专门处理Http请求的Servlet

2.​​​​​​​Http请求方法

方法描述
GET通过请求的 URI 获取资源。
POST向服务器提交新内容,通常用于创建新资源。
PUT修改指定的资源。
DELETE删除指定的资源。
CONNECT用于代理服务器进行 SSL 传输(如建立 SSL 隧道)。
OPTIONS询问服务器关于目标资源的通信选项。
PATCH对资源进行部分修改。
TRACE回显服务器收到的请求,主要用于测试或诊断。
HEAD类似于 GET 请求,但不返回响应主体内容,用于获取元数据。

 3.​​​​​​​创建HttpServlet

第一种:创建一个类继承HttpServlet

package cn.tx.servlet;import javax.servlet.http.HttpServlet;public class Servlet2 extends HttpServlet{}

配置Servlet映射路径:

<servlet><servlet-name>hello2</servlet-name><servlet-class>cn.tx.servlet.Servlet2</servlet-class>
</servlet><servlet-mapping><servlet-name>hello2</servlet-name><url-pattern>/hello2</url-pattern>
</servlet-mapping>

第二种:IDEA直接创建servlet

填写servlet名称:

 

创建完成,自己填写映射路径

4.servlet创建顺序

有些Servlet需要在Tomcat启动时就被创建,而不是第一次访问时被创建,那么可以在web.xml文件中配置<servlet>元素。

在<servlet>元素中添加子元素<load-on-startup>元素!

<servlet><servlet-name>hello</servlet-name><servlet-class>cn.tx.servlet.Servlet1</servlet-class><load-on-startup>1</load-on-startup>
</servlet>

总结

  • 加载顺序:Servlet 的加载顺序由 <load-on-startup> 元素的值决定,值越小,越早加载。

  • 应用启动加载:所有指定了 <load-on-startup> 的 Servlet 将在 Web 应用启动时被加载,而不是在第一次请求时。

  • 日志验证:可以通过在 init() 方法中添加日志输出来验证 Servlet 的加载顺序。

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

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

相关文章

Spring Cloud — Hystrix 服务隔离、请求缓存及合并

Hystrix 的核心是提供服务容错保护&#xff0c;防止任何单一依赖耗尽整个容器的全部用户线程。使用舱壁隔离模式&#xff0c;对资源或失败单元进行隔离&#xff0c;避免一个服务的失效导致整个系统垮掉&#xff08;雪崩效应&#xff09;。 1 Hystrix监控 Hystrix 提供了对服务…

DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

WPS接入deepseek-OfficeAI助手插件下载

功能简介 OfficeAI 助手 是一款免费的智能AI办公工具软件&#xff0c;专为 Microsoft Office 和 WPS 用户打造。 无论你是在寻找如何输入“打勾&#xff08;√&#xff09;符号”的方法&#xff0c;还是想知道“怎么在插入表格前添加文字”&#xff0c;或者“该用哪个公式”&a…

关系数据理论

一、函数依赖 若t1(X)t2(X),必有t1(Y)t2(Y),那么我们称属性组X函数确定属性组Y&#xff0c;或者说Y函数依赖于X。记为X->Y&#xff0c;其中X叫决定因素&#xff0c;Y叫依赖因素。 平凡函数依赖与非平凡函数依赖&#xff1a; 二、1-BCNF 评价关系模式“好坏”的理论标准就…

【C】队列与栈的相互转换

栈与队列是两种特点相反的数据结构&#xff0c;一个特点是后进先出&#xff0c;一个特点是先进先出&#xff0c;但是他们之间是可以相互转换的。 目录 1 用队列实现栈 1&#xff09; 题目解析 2&#xff09; 算法解析 &#xff08;1&#xff09; 结构(MyStack) &#xff…

有向图的强连通分量: Kosaraju算法和Tarjan算法详解

在上一篇文章中, 我们了解了图的最小生成树算法. 本节我们来学习 图的强连通分量(Strongly Connected Component, SCC) 算法. 什么是强连通分量? 在 有向图 中, 若一组节点内的任意两个节点都能通过路径互相到达(例如 A → B A \rightarrow B A→B 且 B → A B \rightarro…

如何为自己的 PDF 文件添加密码?在线加密 PDF 文件其实更简单

随着信息泄露和数据安全问题的日益突出&#xff0c;保护敏感信息变得尤为重要。加密 PDF 文件是一种有效的手段&#xff0c;可以确保只有授权用户才能访问或修改文档内容。本文将详细介绍如何使用 CleverPDF 在线工具为你的 PDF 文件添加密码保护&#xff0c;确保其安全性。 为…

面向机器学习的Java库与平台简介、适用场景、官方网站、社区网址

Java机器学习的库与平台 最近听到有的人说要做机器学习就一定要学Python&#xff0c;我想他们掌握的知识还不够系统、不够全面。本文作者给大家介绍几种常用Java实现的机器学习库&#xff0c;快快收藏加关注吧&#xff5e; Java机器学习库表格 Java机器学习库整理库/平台概念…

Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警

1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…

Hadoop初体验

一、HDFS初体验 1. shell命令操作 hadoop fs -mkdir /itcast hadoop fs -put zookeeper.out /itcast hadoop fs -ls / 2. Web UI页面操作 结论&#xff1a; HDFS本质就是一个文件系统有目录树结构 和Linux类似&#xff0c;分文件、文件夹为什么上传一个小文件也这…

python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04

mysql sql script: create table School 表 (SchoolId char(5) NOT NULL comment主鍵primary key&#xff0c;學校編號,SchoolName nvarchar(500) NOT NULL DEFAULT comment 學校名稱,SchoolTelNo varchar(8) NULL DEFAULT comment電話號碼,PRIMARY KEY (SchoolId) #主…

解放大脑!用DeepSeek自动生成PPT!

DeepSeek应用&#xff08;PPT篇&#xff09; DeepSeek作为当前最好的AI大模型之一&#xff0c;其强大的文本生成能力被广泛的应用于各个领域&#xff0c;本文我们来聊聊用DeepSeek来自动生成PPT。 一、DeepSeek & PPT DeepSeek本身没有直接生成PPT的能力&#xff0c;换个…

从0到1:固件分析

固件分析 0x01 固件提取 1、从厂商官网下载 例如D-link的固件&#xff1a; https://support.dlink.com/resource/products/ 2、代理或镜像设备更新时的流量 发起中间人攻击MITM #启用IP转发功能 echo 1 > /proc/sys/net/ipv4/ip_forward#配置iptables&#xff0c;将目…

docker独立部署milvus向量数据库

milvus镜像&#xff1a;国外封锁&#xff0c;国内源也不好用。基本上所有源都不能用 首先想到阿里云服务&#xff0c;但是阿里云国外服务器便宜的300~400呢。 基于成本考虑终于装上心心念念的milvus(*^▽^*) 安装 Milvus 安装 Milvus 独立版 wget https://raw.githubuserco…

宇树科技13家核心零部件供应商梳理!

2025年2月6日&#xff0c;摩根士丹利&#xff08;Morgan Stanley&#xff09;发布最新人形机器人研报&#xff1a;Humanoid 100: Mapping the Humanoid Robot Value Chain&#xff08;人形机器人100&#xff1a;全球人形机器人产业链梳理&#xff09;。 Humanoid 100清单清单中…

win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统&#xff0c;报错&#xff1a;Operating System not found 二、原因分析 国产系统&#xff0c;需要注意的点&#xff1a; 需要看你的系统类…

C#初级教程(1)——C# 与.NET 框架:探索微软平台编程的强大组合

图片来源&#xff1a; https://www.lvhang.site/docs/dotnettimeline 即梦AI - 一站式AI创作平台 一、历史发展脉络 在早期的微软平台编程中&#xff0c;常用的编程语言有 Visual Basic、C、C。到了 20 世纪 90 年代末&#xff0c;Win32 API、MFC&#xff08;Microsoft Found…

SpringBoot项目集成MinIO

最近在学习MinIO&#xff0c;所以想让自己的SpringBoot项目集成MinIO,在网上查阅资料&#xff0c;并进行操作的过程中遇到一些问题&#xff0c;所以想把自己遇到的坑和完成步骤记录下来供自己和各位查阅。 一. MinIO的下载安装以及基本使用 1. 下载地址&#xff1a;https://d…

ROS2下编写package利用orbbec相机进行yolov8实时目标检测

视频讲解 ROS2下编写package利用orbbec相机进行yolov8实时目标检测 在《ROS2下编写orbbec相机C package并Rviz显示》的基础上&#xff0c;继续添加对获取的图像使用YOLO进行目标检测 首先安装YOLO以及相关库 pip3 install ultralytics 使用如下指令测试下yolo安装情况 yol…

uniapp引入uview组件库(可以引用多个组件)

第一步安装 npm install uview-ui2.0.31 第二步更新uview npm update uview-ui 第三步在main.js中引入uview组件库 第四步在uni.scss中引入import "uview-ui/theme.scss"样式 第五步在文件中使用组件