JAVA |日常开发中Servlet详解
JAVA |日常开发中Servlet详解
- 前言
- 一、Servlet 概述
- 1.1 定义
- 1.2 历史背景
- 二、Servlet 的生命周期
- 2.1 加载和实例化
- 2.2 初始化(init 方法)
- 2.3 服务(service 方法)
- 2.4 销毁(destroy 方法)
- 三、Servlet 接口和类
- 3.1 Servlet 接口
- 3.2 GenericServlet 类
- 3.3 HttpServlet 类
- 四、Servlet 的配置
- 4.1 web.xml 配置文件
- 4.2 注解配置(Servlet 3.0+)
- 五、Servlet 的应用场景
- 5.1 处理网页请求
- 5.2 处理表单数据
- 5.3 构建 RESTful API
- 结束语
- 优质源码分享
JAVA |日常开发中Servlet详解
,Servlet 是 Java 编程语言中的一个类,用于在服务器端处理客户端的请求并生成响应。它是 Java Web 应用程序的核心组件之一,运行在支持 Java 的 Web 服务器或应用服务器中。例如,当用户通过浏览器访问一个网站的某个页面时,服务器会调用相应的 Servlet 来处理这个请求,然后将处理结果返回给浏览器。
前言
在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。
一、Servlet 概述
1.1 定义
Servlet 是 Java 编程语言中的一个类,用于在服务器端处理客户端的请求并生成响应。它是 Java Web 应用程序的核心组件之一,运行在支持 Java 的 Web 服务器或应用服务器中。
例如,当用户通过浏览器访问一个网站的某个页面时,服务器会调用相应的 Servlet 来处理这个请求,然后将处理结果返回给浏览器。
1.2 历史背景
Servlet 技术是在早期的 CGI(通用网关接口)脚本基础上发展而来的。CGI 脚本虽然能够实现动态网页功能,但是存在性能较差、资源消耗大等问题。Servlet 作为 Java 语言编写的服务器端组件,很好地解决了这些问题,它可以高效地处理多个请求,并且具有跨平台等诸多优势。
二、Servlet 的生命周期
2.1 加载和实例化
当 Web 容器(如 Tomcat)启动时,或者在容器接收到第一个针对该 Servlet 的请求时,会加载 Servlet 类并创建 Servlet 实例。这个过程是由容器自动完成的。
例如,在一个简单的 Web 应用中,当用户第一次访问一个由 Servlet 处理的 URL 路径时,容器会查找对应的 Servlet 类,通过类加载器加载它,然后使用new关键字创建一个实例。
2.2 初始化(init 方法)
在 Servlet 实例创建之后,容器会调用 Servlet 的init(ServletConfig config)方法。这个方法只会被调用一次,用于对 Servlet 进行初始化操作,比如加载配置参数、初始化数据库连接等。
例如,以下是一个简单的init方法示例,用于从配置文件中读取一些初始化信息:
public class MyServlet extends HttpServlet {private String configParam;@Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);configParam = config.getInitParameter("myConfigParam");}
}
2.3 服务(service 方法)
当有客户端请求到达时,容器会调用 Servlet 的service(ServletRequest req, ServletResponse res)方法。这个方法根据请求的类型(如 GET、POST 等),将请求转发到相应的doGet或doPost等方法(对于HttpServlet类而言)。
例如,在一个处理用户登录的 Servlet 中,doPost方法可能会获取用户提交的用户名和密码,然后在数据库中进行验证:
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(ServletRequest request, ServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");// 进行数据库验证等操作}
}
2.4 销毁(destroy 方法)
当 Web 容器决定销毁 Servlet 时(例如,容器关闭或者 Servlet 长时间未被使用等情况),会调用 Servlet 的destroy方法。这个方法用于释放 Servlet 占用的资源,如关闭数据库连接、释放文件句柄等。
例如,在destroy方法中可以这样关闭数据库连接:
public class MyServlet extends HttpServlet {private Connection conn;@Overridepublic void init(ServletConfig config) throws ServletException {// 初始化数据库连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");}@Overridepublic void destroy() {try {if (conn!= null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}
三、Servlet 接口和类
3.1 Servlet 接口
Servlet 接口是所有 Servlet 类必须实现的接口,它定义了 Servlet 的基本生命周期方法,包括init、service和destroy。
例如,一个自定义的 Servlet 如果不继承HttpServlet等已有的 Servlet 类,就需要直接实现 Servlet 接口,并且实现这些方法来处理请求和响应。
其方法签名如下:
public interface Servlet {public void init(ServletConfig config) throws ServletException;public ServletConfig getServletConfig();public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;public String getServletInfo();public void destroy();
}
3.2 GenericServlet 类
GenericServlet是一个抽象类,它实现了Servlet接口中的部分方法,为开发者提供了更方便的开发方式。它主要用于处理与协议无关的 Servlet 开发,例如,它提供了获取初始化参数等通用方法。
例如,下面是一个简单的GenericServlet示例,用于输出一个初始化参数的值:
public class MyGenericServlet extends GenericServlet {@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {String initParam = getServletConfig().getInitParameter("myParam");servletResponse.getWriter().write("The init parameter value is: " + initParam);}
}
3.3 HttpServlet 类
HttpServlet是用于处理 HTTP 请求的 Servlet 类,它继承自GenericServlet。它根据 HTTP 请求的方法(如 GET、POST、PUT、DELETE 等)将请求路由到相应的doXxx方法(如doGet、doPost等)。
例如,在一个 Web 应用中,大多数用于处理网页请求的 Servlet 都会继承 HttpServlet。如果要处理一个表单提交的 POST 请求,就可以在doPost方法中进行处理,如下所示:
public class FormServlet extends HttpServlet {@Overrideprotected void doPost(ServletRequest request, ServletResponse response) throws ServletException, IOException {// 处理表单数据}
}
四、Servlet 的配置
4.1 web.xml 配置文件
在传统的 Java Web 应用中,web.xml文件用于配置 Servlet。可以在web.xml中定义 Servlet 的名称、类路径、初始化参数和 URL 映射等信息。
例如,以下是一个简单的web.xml配置示例,用于配置一个名为MyServlet的 Servlet:
<web - app><servlet><servlet - name>MyServlet</servlet - name><servlet - class>com.example.MyServlet</servlet - class><init - parameter><param - name>myConfigParam</param - name><param - value>value</param - value></init - parameter></servlet><servlet - mapping><servlet - name>MyServlet</servlet - name><url - pattern>/myServletPath</url - pattern></servlet - mapping>
</web - app>
其中,<servlet - name>定义了 Servlet 的名称,<servlet - class>指定了 Servlet 的类路径,<init - parameter>用于设置初始化参数,<servlet - mapping>中的<url - pattern>则定义了该 Servlet 对应的 URL 路径。
4.2 注解配置(Servlet 3.0+)
从 Servlet 3.0 开始,可以使用注解来配置 Servlet。这样可以减少web.xml文件的复杂度,并且更加方便快捷。
例如,使用@WebServlet注解可以这样配置一个 Servlet:
@WebServlet(name = "MyServlet", urlPatterns = {"/myServletPath"}, initParams = {@WebInitParam(name = "myConfigParam", value = "value")
})
public class MyServlet extends HttpServlet {// Servlet代码
}
这里的@WebServlet注解中的name属性相当于web.xml中的<servlet - name>,urlPatterns相当于<url - pattern>,initParams相当于<init - parameter>。
五、Servlet 的应用场景
5.1 处理网页请求
这是 Servlet 最常见的应用场景。当用户在浏览器中访问一个网页时,服务器可以使用 Servlet 来生成动态的 HTML 内容并返回给浏览器。
例如,一个新闻网站可以使用 Servlet 从数据库中获取新闻数据,然后将数据填充到 HTML 模板中,最后返回给用户一个包含最新新闻的网页。
5.2 处理表单数据
当用户在网页上提交表单(如登录表单、注册表单等)时,Servlet 可以获取表单数据并进行处理。它可以验证数据的合法性,将数据存储到数据库中,或者根据数据进行相应的业务逻辑处理。
例如,在一个用户注册的场景中,Servlet 可以获取用户提交的姓名、邮箱、密码等信息,进行密码加密等操作后,将用户信息插入到数据库中。
5.3 构建 RESTful API
Servlet 也可以用于构建 RESTful API。通过处理不同的 HTTP 请求方法(如 GET、POST、PUT、DELETE),可以实现对资源的获取、创建、更新和删除操作。
例如,一个简单的 RESTful API 可以使用 Servlet 来实现对用户资源的管理。当接收到一个GET请求时,返回用户列表;当接收到一个POST请求时,创建一个新用户等。
结束语
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
优质源码分享
-
【百篇源码模板】html5各行各业官网模板源码下载
-
【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)
-
【VUE系列】VUE3实现个人网站模板源码
-
【HTML源码】HTML5小游戏源码
-
【C#实战案例】C# Winform贪吃蛇小游戏源码
💞 关注博主 带你实现畅游前后端
🏰 大屏可视化 带你体验酷炫大屏
💯 神秘个人简介 带你体验不一样得介绍
🎀 酷炫邀请函 带你体验高大上得邀请
① 🉑提供云服务部署(有自己的阿里云);
② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
如🈶合作请联系我,期待您的联系。
注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌
原文地址:https://blog.csdn.net/weixin_43151418/article/details/144189006(防止抄袭,原文地址不可删除)
相关文章:

JAVA |日常开发中Servlet详解
JAVA |日常开发中Servlet详解 前言一、Servlet 概述1.1 定义1.2 历史背景 二、Servlet 的生命周期2.1 加载和实例化2.2 初始化(init 方法)2.3 服务(service 方法)2.4 销毁(destroy 方法) 三、Se…...

QT实战--QTreeWidget实现两种行颜色+QListWidget样式
本文主要介绍了QTreeWidget实现两种行颜色、点击打开父节点以及设置父子节点之间距离,同时附带介绍了QListWidget样式 树效果图: 列表效果图: 1.树样式的实现 1)使用代码: m_pLeftTreeWidget = new QTreeWidget(this);m_pLeftTreeWidget->setObjectName("suolue_t…...
RPA在IT运维中的实践:自动化监控与维护
一、引言 1. IT运维面临的挑战与RPA的机遇 在IT运维领域,日常的监控、维护和故障响应等工作占据了大量的时间和资源。随着技术的发展,RPA技术提供了自动化这些重复性任务的可能性,从而释放IT团队的潜力,让他们能够专注于更复杂和…...
C# 设置方法执行超时,则执行下一个方法
最近在开发过程中遇到了一个问题,在进行通讯连接时,如果没有连接的话会延时几十秒,而且还设置不了连接超时时间,于是我就想着有没有一种可以判断这个方法的执行时间超过多少秒,就跳出执行其他方法,经过大量…...

【iOS】UIImagePickerController
【iOS】UIImagePickerController 前言 笔者简单学习了iOS开发如何调用本地的一个相册的内容,下面简单介绍一下相关内容。 介绍 UIImagePickerController是iOS平台上的一个类,用于在应用程序中访问设备的照片库、相机和视频录制功能。它提供了一个用户…...

现代企业营销模式创新:链动 2+1 模式 AI 智能名片商城小程序的应用与价值
摘要:本文旨在探讨现代企业面临的客户环境变化以及相应的营销模式变革需求,重点分析链动 21 模式 AI 智能名片商城小程序在满足现代企业营销沟通即时性、精准性、社会性和方便性要求方面的作用,并阐述其对企业在未来市场竞争中取得胜利的重要…...

springboot+Loki+Loki4j+Grafana搭建轻量级日志系统
文章目录 前言一、日志组件介绍 1.1 Loki组件1.2 Loki4j组件1.3 Grafana 二、组件下载安装运行 Loki下载安装运行Grafana下载安装运行 三、创建springboot项目总结 前言 日志在任何一个web应用中都是不可忽视的存在,它已经成为大部分系统的标准组成部分。搭建日志…...

服务器守护进程化
目录 一、守护进程的定义与特点 1、定义 2、特点 二、守护进程的原理 三、守护进程与会话(Session)的关系 四、C实现守护进程 守护进程(Daemon Process)是一个在后台运行、通常不与用户直接交互的进程。守护进程是操作系统中…...

灵途科技亮相2024世界传感器大会 分享光纤光源技术突破
12月1日至2日,2024世界传感器大会(WSS)在郑州国际会展中心隆重举办,泛自动驾驶领域光电感知专家灵途科技受邀参加“光纤传感器与激光雷达”分论坛,并在大会上带来《激光雷达用一体化光纤光源》专题演讲,同与…...
day35—蓝桥杯2024年第16届校赛模拟第二期-T4(最小花费)
【问题描述】 小蓝有一个整数,初始值为 1 ,他可以花费一些代价对这个整数进行变换。 小蓝可以花费 1 的代价将整数增加 1 。 小蓝可以花费 3 的代价将整数增加一个值,这个值是整数的数位中最大的那个(1 到 9)。 小蓝可…...

【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 ✔️ 11.2.2.…...

游戏引擎学习第38天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上,但颜色错误的问题。问题最终查明是因为使用了一个调整工具,导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…...
P1223 排队接水(贪心)
题目描述 有 𝑛个人在一个水龙头前排队接水,假如每个人接水的时间为 𝑇𝑖,请编程找出这 𝑛 个人排队的一种顺序,使得 𝑛个人的平均等待时间最小。 输入格式 第一行为一个整数 &am…...

关于springBoot+vue项目中配置SSL证书问题
前端可以通过https进行访问 1.前端在访问后端接口时,使用https进行访问,在request.js配置文件中,这个文件是配置axios的基本请求的,在基础请求地址中改为https方式 2.需要在Linux中的nginx中配置ssl证书,具体请参考&…...

GUI的最终选择:Tkinter
Tkinter是Python默认的GUI库,因此使用时直接导入即可:import tkinter 17.1 Tkinter之初体验 代码分析: tkinter.mainloop()通常是程序的最后一行代码,执行后程序进入主事件循环。 17.2 进阶版本 将代码封装成类: 运…...
Photohop关于数位板没有压力感,PS画笔的钢笔压力总是显示感叹号的问题解放方法
(实际我只用到红色字2步解决了问题,但为了兼顾更多朋友,还是把其他步骤详细完善) 一,先确定数位板正常链接电脑,并安装好驱动,并在驱动测试到压力 二,解决PS前感叹号问题 …...
rust websocket Echo server高性能服务器开发
最近在学习websocket时,一直没有发现好的websocket server工具来调试,于是就自己做了一个websocket server用来学习和调试。因为rust性能遥遥领先,所以就采用了rust来搭建服务器。废话不多说直接上代码main.rs: use tokio::net::TcpListener; use tokio_tungstenite::tung…...
19、网络编程:
19、网络编程: 网络的相关概念: 网络通讯: 概念:两台设备之间通过网络实现数据传输;网络通讯:将数据通过网络从一台设备传输到另一台设备;java.net包下提供了一系列的类或接口,供…...

[代码随想录11]栈和队列的应用,逆波兰表达式求值 、滑动窗口最大值、前 K 个高频元素
前言 这几个题目都是栈和队列的高频面试题目,主要是考察思路和coding能力,在前面几道题目的基础上进行延伸的。同时还有优先级队列和双端队列的用法 题目链接 150. 逆波兰表达式求值 - 力扣(LeetCode) 239. 滑动窗口最大值 - 力…...

认证插件介绍
本文档是针对 UOS 登录器插件给出开发指南,目的是为了让开发人员了解如何在 UOS 登录器上增加一种自定义认证方式,对插件接口做了详细说明以及实战练习。 文章目录 一、认证插件可以做什么?二、认证流程三、术语说明四、安全性五、可靠性六、…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...