Java:Servlet详解
目录
一、什么是Servlet
二、Servlet原理
Servlet的生命周期
三、 Servlet注释
@WebServlet
一、什么是Servlet
Servlet是JavaWeb开发的一种技术,Servlet程序需要部署在Servlet容器(服务端)中才能运行,常见的Servlet容器有Tomcat,Jetty等。
其主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程包括以下4个阶段。
(1)、Client向Server发送请求。
(2)、Server将请求信息发送至Servlet。
(3)、Servlet根据请求信息生成响应内容(包括静态或动态内容)并将其传给Server。
(4)、Server将响应返回给Client。

二、Servlet原理

从UML类图中我们可以看出Servlet是一个接口,定义了init初始化、service响应服务、destroy销毁等方法,而GennericServlet作为抽象类实现了Servlet接口,而HttpServlet抽象类继承了GennericServlet类,同时定义了doGet方法,doPost方法来完成相应的Http处理。
其中还可以发现HttpServletRequest和HttpServletResponse是接口,其具体的实现类是web服务器tomcat的两个类。也就是说Servlet必须运行在Servlet容器里
Servlet的生命周期
1.初始化init(),仅在第一次加载Servlet时被调用。
2.执行服务,调用service()方法响应客户请求。
3.销毁调用destory()杀掉Servlet对象。
三、 Servlet注释
我们平时使用部署描述符(web.xml文件)将应用程序部署到Web服务器中。tomcat7以上版本、Servlet API 3.0引入了一个名为javax.servlet.annotation的新程序包。它提供了可用于对Servlet类进行注释的注释类型。如果使用批注,则不需要部署描述符(web.xml)。
@WebServlet
| 属性 | 用处 |
| String name | Servlet的名称 |
| urlPatterms | 过滤器的URL格式数组(支持使用通配符) |
| value | URL格式数组 |
使用value或urlPatterns属性中必须声明至少一个URL模式 ,但不能两者都声明(两者不能同时存在)。
实例:
编写了一个带有注释的servlet,url格式为:/Login,它会匹配的请求路径为/Time/Login,其中Time为Web项目名。
package com.example.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.example.utils.JDBCUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;@WebServlet(name = "LoginServlet",urlPatterns = "/Login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//处理客户端的post请求 response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");//解决乱码问题!设置内容都为utf-8格式PrintWriter out = response.getWriter();String username = request.getParameter("name");String password = request.getParameter("secret");HttpSession session=request.getSession();//创建一个会话对象!JDBCUtils.registerDriver();Connection connection=JDBCUtils.getConnection();PreparedStatement pStatement=null;try {ResultSet resultSet=JDBCUtils.checkExit(username, pStatement, connection);if(resultSet.next()){if(!password.equals(resultSet.getString("password"))){out.write("<script language='javascript'>alert('密码错误,请重新输入!');window.location.href='/Todoproject/login.html'</script>");}else{session.setAttribute("username", username);out.write("<script language='javascript'>alert('登录成功!');window.location.href='/Todoproject/menu.html'</script>");}}else{//如果没有找到!out.write("<script language='javascript'>alert('该用户不存在!');window.location.href='/Todoproject/login.html'</script>");}} catch (SQLException e) {e.printStackTrace();out.write("<script language='javascript'>alert('系统发生错误!');window.location.href='/Todoproject/login.html'</script>");}finally{JDBCUtils.closeConnection(connection);}}
}
以下为表单发起的请求
<form method="post" action="/Time/Login" id="Login" onsubmit="return checklogin()">用户名:<input type="text" placeholder=" 账号" name="name" id="name"><br><br>密码: <input type="password" placeholder=" 密码" name="secret" id="secret"><button id="submit" type="submit" >登录</button><button id="register" type="button" onclick="window.open('register.html') " >注册 </button>
</form>
相关文章:
Java:Servlet详解
目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术,Servlet程序需要部署在Servlet容器(服务端)中才能运行,常见的Servlet容器有Tom…...
Oracle存储过程怎么定义类并继承
在Oracle数据库中,存储过程(Stored Procedure)是用于执行特定功能的预编译的SQL代码块。然而,Oracle的存储过程并不直接支持面向对象的编程概念,如类(Class)和继承(Inheritance&…...
14_Scala面向对象编程_属性
文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值,为了解决此问题可以采…...
什么是网页反作弊
在搜索引擎技术中,网页反作弊是指一种防止网页排名被恶意操纵的技术。搜索引擎会根据特定的算法来评估网页的相关性和质量,以决定其在搜索结果中的排名。然而,有些人可能会尝试通过各种不正当的手段来提高自己网页的排名,这被称为…...
MAVEN打包JAR启动执行manifest
当您使用Maven进行项目打包,特别是需要创建一个可执行的JAR文件时,确保JAR文件的MANIFEST.MF中包含正确的Main-Class属性是非常重要的。这个属性告诉Java运行时环境哪个类包含main方法,作为应用程序的入口点。 如果您发现生成的JAR文件不包含…...
JavaEE 多线程详细讲解(1)
1.线程是什么 (shift F6)改类名 1.1.并发编程是什么 (1)当前的CPU,都是多核心CPU (2)需要一些特定的编程技巧,把要完成的仍无,拆解成多个部分,并且分别让…...
数据分析从入门到精通 1.numpy剑客修炼
会在某一瞬间突然明白,有些牢笼是自己给自己的 —— 24.5.5 一、数据分析秘笈介绍 1.什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律。使得数据的价值最大化 案例: 分析用户的消…...
【iOS】KVO
文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后,isa指向是谁,以及中间类是否会销毁?总结 三、KVO本质GNUStep窥探…...
python json字符串怎么用format方法填充参数值报KeyError
python json字符串怎么用format方法填充参数值报KeyError 需求问题分析解决方案 需求 因为python中的字典和json中的一些变量有差异,比如:json中有null、true,在python中就不会被识别,只能转换成字符串,在通过loads()…...
C++新手村指南:入门基础
目录 C概念 C发展史 C关键字(C98) 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…...
智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境
目录 一、引言 二、智慧旅游的定义与特点 (一)智慧旅游的定义 (二)智慧旅游的特点 三、智能科技在旅游服务中的应用 (一)大数据分析助力旅游决策 (二)人工智能实现个性化推荐…...
Hikyuu-PF-银行股轮动交易策略实现
今天,带来的是“如何使用 Hikyuu 中的投资组合来实现银行股轮动交易策略”。 这个策略的逻辑很简单:持续持有两支市净率最低银行股,然后每月换仓 定义回测周期与回测标的 同样,首先定义回测周期: # 定义回测日期 …...
【氮化镓】GaN功率器件在转换器设计中的挑战
I. 引言(INTRODUCTION) 宽带隙(WBG)器件的重要性: 引言部分首先强调了宽带隙(WBG)器件在高频、高效率电力电子技术中的关键作用。这些器件,包括碳化硅(SiC)和氮化镓(GaN),相较于传统的硅功率器件,具有显著的优势。宽带隙半导体材料的高击穿场强允许设计更薄的漂…...
DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2,1306310-00-8,是一种重要的多肽化合物
一、试剂信息 名称:DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2CAS号:1306310-00-8结构式: 二、试剂内容 DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2是一种重要的多肽化合物,其CAS号为1306310-00-8。该多肽包含一个DO…...
CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板
CopyClip for Mac,一款专为Mac用户打造的剪贴板管理工具,让你在复制粘贴的日常任务中,享受到前所未有的高效与便捷。 它常驻在菜单栏中,时刻准备为你服务。一旦你复制了内容,CopyClip就会自动将其保存至历史记录中&…...
[windows系统安装/重装系统][step-1]U盘启动盘制作,微软官方纯净系统镜像下载
前言 U盘至少8GB吧我这刚好有个空闲的U盘8GB容量,制作启动盘且放入一个最新win10官方镜像足够 不是天天装系统,至少USB2.0 (我用的2.0的一个闲置U盘)即可,当然平时传资料什么的3.0会快些 U盘启动盘仅需要制作一次, U盘启动盘制…...
AI换脸原理(4)——人脸对齐(关键点检测)参考文献2DFAN:代码解析
注意,本文属于人脸关键点检测步骤的论文,虽然也在人脸对齐的范畴下。 1、介绍 在本文中,重点介绍了以下几项创新性的成果,旨在为人脸关键点检测领域带来新的突破。 首先,成功构建了一个卓越的2D人脸关键点检测基线模型。这一模型不仅集成了目前最优的关键点检测网络结构,…...
Sarcasm detection论文解析 |使用 BERT 进行中间任务迁移学习的刺检测
论文地址 论文地址:https://www.mdpi.com/2227-7390/10/5/844#/ github:edosavini/TransferBertSarcasm (github.com) 论文首页 笔记框架 使用 BERT 进行中间任务迁移学习的讽刺检测 📅出版年份:2022 📖出版期刊:Mathematics &…...
docker系列9:容器卷挂载(下)
传送门 docker系列1:docker安装 docker系列2:阿里云镜像加速器 docker系列3:docker镜像基本命令 docker系列4:docker容器基本命令 docker系列5:docker安装nginx docker系列6:docker安装redis docker系…...
QT ERROR: Unknown module(s) in QT: xlsx怎么办
现象描述 QT编译c代码的时候,报这种QT ERROR: Unknown module(s) in QT: xlsx,应该如何解决? 这里,我简单记录一下自己的解决问题过程。有可能,对遇到同样的问题的你,也有所帮助 第一步 检查perl是否安装…...
别再让AI芯片‘睡大觉’了:手把手教你用华为昇腾+CANN搞定异构算力调度
华为昇腾CANN实战:破解AI芯片利用率困局的5个关键策略 推开实验室玻璃门,迎面是十几台Atlas 800服务器闪烁的指示灯,而工程师小王正对着监控大屏上30%的平均利用率皱眉——这场景在采用国产AI芯片的团队中太常见了。当我们谈论异构算力调度时…...
避坑指南:为什么你的Jetson开发板apt安装Perf总是失败?
深度解析:Jetson开发板为何无法直接安装Perf及高效解决方案 在嵌入式开发领域,Nvidia Jetson系列凭借其强大的AI计算能力成为边缘计算的热门选择。然而当开发者尝试在这类设备上使用标准Ubuntu方法安装性能分析工具Perf时,往往会遭遇意想不到…...
HunyuanVideo-Foley效果展示:AI生成的量子计算实验室环境音效(科技感)
HunyuanVideo-Foley效果展示:AI生成的量子计算实验室环境音效(科技感) 1. 核心能力概览 HunyuanVideo-Foley是一款专为视频与音效生成设计的AI模型,其私有部署镜像经过RTX 4090D 24GB显卡的深度优化。这个镜像最令人惊艳的能力之…...
Node.js 轻量级数据库 NeDB 实战指南:从入门到精通
1. 为什么你需要了解NeDB 如果你正在寻找一个轻量级的Node.js数据库解决方案,NeDB绝对值得你花时间研究。作为一个嵌入式数据库,它不需要单独运行数据库服务,数据可以直接存储在内存或磁盘文件中。我在多个小型项目中使用过NeDB,最…...
实战教学应用:基于快马平台开发生物繁殖课互动学习与测评系统
作为一名生物老师,我一直在寻找能够让学生更直观理解繁殖知识的教学工具。最近尝试用InsCode(快马)平台开发了一个互动学习系统,效果出乎意料的好。这个平台最棒的地方是,不需要复杂的服务器配置,就能把想法快速变成可实际使用的教…...
MGeo门址解析应用场景:房产中介平台房源地址自动标准化与GIS热力图生成
MGeo门址解析应用场景:房产中介平台房源地址自动标准化与GIS热力图生成 1. 引言:房产中介的地址之痛 想象一下,你是一家房产中介公司的运营人员。每天,你的同事和合作方会通过各种渠道收集到成百上千条房源信息:有的…...
OpenClaw技能开发入门:为nanobot镜像编写第一个插件
OpenClaw技能开发入门:为nanobot镜像编写第一个插件 1. 为什么需要自定义技能 当我第一次接触OpenClaw时,最让我惊喜的是它能够像人类一样操作电脑完成各种任务。但很快我发现,内置的基础技能并不能完全满足我的个性化需求。比如我需要定期…...
前端微前端架构:别再把所有功能都放在一个应用里了
前端微前端架构:别再把所有功能都放在一个应用里了 各位前端同行,咱们今天聊聊前端微前端架构。别告诉我你还在把所有功能都放在一个应用里,那感觉就像在一个房间里放了所有家具。 为什么你需要微前端架构 最近看到一个项目,单页应…...
cutlass代码架构分析
CUTLASS 代码架构分析 本文档基于 cutlass代码进行梳理,快速理解 CUTLASS 4.x 的模块边界与调用链路。 1. 总体架构 CUTLASS 本质上是一个 header-only 的 CUDA C++ 模板库,外围配套了可选构建目标: include/:核心库(cutlass + cute) tools/:库实例化、性能测试与通用…...
从 0 开始讲透 C++ Lambda(对标 Java)
在写 C 多线程或 STL 时,经常会看到这样的代码:std::thread t([]{ std::cout << "Hello C Thread\n"; });很多人第一反应:这 [] 是什么?为什么和 Java 不一样?一、先给结论(先建立整体认知…...
