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是否安装…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
