当前位置: 首页 > news >正文

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 nameServlet的名称
urlPatterms过滤器的URL格式数组(支持使用通配符)
valueURL格式数组

使用valueurlPatterns属性中必须声明至少一个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>密码:&emsp;<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开发的一种技术&#xff0c;Servlet程序需要部署在Servlet容器&#xff08;服务端&#xff09;中才能运行&#xff0c;常见的Servlet容器有Tom…...

Oracle存储过程怎么定义类并继承

在Oracle数据库中&#xff0c;存储过程&#xff08;Stored Procedure&#xff09;是用于执行特定功能的预编译的SQL代码块。然而&#xff0c;Oracle的存储过程并不直接支持面向对象的编程概念&#xff0c;如类&#xff08;Class&#xff09;和继承&#xff08;Inheritance&…...

14_Scala面向对象编程_属性

文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采…...

什么是网页反作弊

在搜索引擎技术中&#xff0c;网页反作弊是指一种防止网页排名被恶意操纵的技术。搜索引擎会根据特定的算法来评估网页的相关性和质量&#xff0c;以决定其在搜索结果中的排名。然而&#xff0c;有些人可能会尝试通过各种不正当的手段来提高自己网页的排名&#xff0c;这被称为…...

MAVEN打包JAR启动执行manifest

当您使用Maven进行项目打包&#xff0c;特别是需要创建一个可执行的JAR文件时&#xff0c;确保JAR文件的MANIFEST.MF中包含正确的Main-Class属性是非常重要的。这个属性告诉Java运行时环境哪个类包含main方法&#xff0c;作为应用程序的入口点。 如果您发现生成的JAR文件不包含…...

JavaEE 多线程详细讲解(1)

1.线程是什么 &#xff08;shift F6&#xff09;改类名 1.1.并发编程是什么 &#xff08;1&#xff09;当前的CPU&#xff0c;都是多核心CPU &#xff08;2&#xff09;需要一些特定的编程技巧&#xff0c;把要完成的仍无&#xff0c;拆解成多个部分&#xff0c;并且分别让…...

数据分析从入门到精通 1.numpy剑客修炼

会在某一瞬间突然明白&#xff0c;有些牢笼是自己给自己的 —— 24.5.5 一、数据分析秘笈介绍 1.什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来&#xff0c;总结出所研究对象的内在规律。使得数据的价值最大化 案例&#xff1a; 分析用户的消…...

【iOS】KVO

文章目录 前言一、KVO使用1.基本使用2.context使用3.移除KVO通知的必要性4.KVO观察可变数组 二、代码调试探索1.KVO对属性观察2.中间类3.中间类的方法3.dealloc中移除观察者后&#xff0c;isa指向是谁&#xff0c;以及中间类是否会销毁&#xff1f;总结 三、KVO本质GNUStep窥探…...

python json字符串怎么用format方法填充参数值报KeyError

python json字符串怎么用format方法填充参数值报KeyError 需求问题分析解决方案 需求 因为python中的字典和json中的一些变量有差异&#xff0c;比如&#xff1a;json中有null、true&#xff0c;在python中就不会被识别&#xff0c;只能转换成字符串&#xff0c;在通过loads()…...

C++新手村指南:入门基础

目录 C概念 C发展史 C关键字&#xff08;C98&#xff09; 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…...

智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境

目录 一、引言 二、智慧旅游的定义与特点 &#xff08;一&#xff09;智慧旅游的定义 &#xff08;二&#xff09;智慧旅游的特点 三、智能科技在旅游服务中的应用 &#xff08;一&#xff09;大数据分析助力旅游决策 &#xff08;二&#xff09;人工智能实现个性化推荐…...

Hikyuu-PF-银行股轮动交易策略实现

今天&#xff0c;带来的是“如何使用 Hikyuu 中的投资组合来实现银行股轮动交易策略”。 这个策略的逻辑很简单&#xff1a;持续持有两支市净率最低银行股&#xff0c;然后每月换仓 定义回测周期与回测标的 同样&#xff0c;首先定义回测周期&#xff1a; # 定义回测日期 …...

【氮化镓】GaN功率器件在转换器设计中的挑战

I. 引言(INTRODUCTION) 宽带隙(WBG)器件的重要性: 引言部分首先强调了宽带隙(WBG)器件在高频、高效率电力电子技术中的关键作用。这些器件,包括碳化硅(SiC)和氮化镓(GaN),相较于传统的硅功率器件,具有显著的优势。宽带隙半导体材料的高击穿场强允许设计更薄的漂…...

DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2,1306310-00-8,是一种重要的多肽化合物

一、试剂信息 名称&#xff1a;DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2CAS号&#xff1a;1306310-00-8结构式&#xff1a; 二、试剂内容 DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2是一种重要的多肽化合物&#xff0c;其CAS号为1306310-00-8。该多肽包含一个DO…...

CopyClip for Mac - 高效复制粘贴,轻松管理剪贴板

CopyClip for Mac&#xff0c;一款专为Mac用户打造的剪贴板管理工具&#xff0c;让你在复制粘贴的日常任务中&#xff0c;享受到前所未有的高效与便捷。 它常驻在菜单栏中&#xff0c;时刻准备为你服务。一旦你复制了内容&#xff0c;CopyClip就会自动将其保存至历史记录中&…...

[windows系统安装/重装系统][step-1]U盘启动盘制作,微软官方纯净系统镜像下载

前言 U盘至少8GB吧我这刚好有个空闲的U盘8GB容量&#xff0c;制作启动盘且放入一个最新win10官方镜像足够 不是天天装系统&#xff0c;至少USB2.0 (我用的2.0的一个闲置U盘)即可&#xff0c;当然平时传资料什么的3.0会快些 U盘启动盘仅需要制作一次&#xff0c; U盘启动盘制…...

AI换脸原理(4)——人脸对齐(关键点检测)参考文献2DFAN:代码解析

注意,本文属于人脸关键点检测步骤的论文,虽然也在人脸对齐的范畴下。 1、介绍 在本文中,重点介绍了以下几项创新性的成果,旨在为人脸关键点检测领域带来新的突破。 首先,成功构建了一个卓越的2D人脸关键点检测基线模型。这一模型不仅集成了目前最优的关键点检测网络结构,…...

Sarcasm detection论文解析 |使用 BERT 进行中间任务迁移学习的刺检测

论文地址 论文地址&#xff1a;https://www.mdpi.com/2227-7390/10/5/844#/ github&#xff1a;edosavini/TransferBertSarcasm (github.com) 论文首页 笔记框架 使用 BERT 进行中间任务迁移学习的讽刺检测 &#x1f4c5;出版年份:2022 &#x1f4d6;出版期刊:Mathematics &…...

docker系列9:容器卷挂载(下)

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…...

QT ERROR: Unknown module(s) in QT: xlsx怎么办

现象描述 QT编译c代码的时候&#xff0c;报这种QT ERROR: Unknown module(s) in QT: xlsx&#xff0c;应该如何解决&#xff1f; 这里&#xff0c;我简单记录一下自己的解决问题过程。有可能&#xff0c;对遇到同样的问题的你&#xff0c;也有所帮助 第一步 检查perl是否安装…...

别再让AI芯片‘睡大觉’了:手把手教你用华为昇腾+CANN搞定异构算力调度

华为昇腾CANN实战&#xff1a;破解AI芯片利用率困局的5个关键策略 推开实验室玻璃门&#xff0c;迎面是十几台Atlas 800服务器闪烁的指示灯&#xff0c;而工程师小王正对着监控大屏上30%的平均利用率皱眉——这场景在采用国产AI芯片的团队中太常见了。当我们谈论异构算力调度时…...

避坑指南:为什么你的Jetson开发板apt安装Perf总是失败?

深度解析&#xff1a;Jetson开发板为何无法直接安装Perf及高效解决方案 在嵌入式开发领域&#xff0c;Nvidia Jetson系列凭借其强大的AI计算能力成为边缘计算的热门选择。然而当开发者尝试在这类设备上使用标准Ubuntu方法安装性能分析工具Perf时&#xff0c;往往会遭遇意想不到…...

HunyuanVideo-Foley效果展示:AI生成的量子计算实验室环境音效(科技感)

HunyuanVideo-Foley效果展示&#xff1a;AI生成的量子计算实验室环境音效&#xff08;科技感&#xff09; 1. 核心能力概览 HunyuanVideo-Foley是一款专为视频与音效生成设计的AI模型&#xff0c;其私有部署镜像经过RTX 4090D 24GB显卡的深度优化。这个镜像最令人惊艳的能力之…...

Node.js 轻量级数据库 NeDB 实战指南:从入门到精通

1. 为什么你需要了解NeDB 如果你正在寻找一个轻量级的Node.js数据库解决方案&#xff0c;NeDB绝对值得你花时间研究。作为一个嵌入式数据库&#xff0c;它不需要单独运行数据库服务&#xff0c;数据可以直接存储在内存或磁盘文件中。我在多个小型项目中使用过NeDB&#xff0c;最…...

实战教学应用:基于快马平台开发生物繁殖课互动学习与测评系统

作为一名生物老师&#xff0c;我一直在寻找能够让学生更直观理解繁殖知识的教学工具。最近尝试用InsCode(快马)平台开发了一个互动学习系统&#xff0c;效果出乎意料的好。这个平台最棒的地方是&#xff0c;不需要复杂的服务器配置&#xff0c;就能把想法快速变成可实际使用的教…...

MGeo门址解析应用场景:房产中介平台房源地址自动标准化与GIS热力图生成

MGeo门址解析应用场景&#xff1a;房产中介平台房源地址自动标准化与GIS热力图生成 1. 引言&#xff1a;房产中介的地址之痛 想象一下&#xff0c;你是一家房产中介公司的运营人员。每天&#xff0c;你的同事和合作方会通过各种渠道收集到成百上千条房源信息&#xff1a;有的…...

OpenClaw技能开发入门:为nanobot镜像编写第一个插件

OpenClaw技能开发入门&#xff1a;为nanobot镜像编写第一个插件 1. 为什么需要自定义技能 当我第一次接触OpenClaw时&#xff0c;最让我惊喜的是它能够像人类一样操作电脑完成各种任务。但很快我发现&#xff0c;内置的基础技能并不能完全满足我的个性化需求。比如我需要定期…...

前端微前端架构:别再把所有功能都放在一个应用里了

前端微前端架构&#xff1a;别再把所有功能都放在一个应用里了 各位前端同行&#xff0c;咱们今天聊聊前端微前端架构。别告诉我你还在把所有功能都放在一个应用里&#xff0c;那感觉就像在一个房间里放了所有家具。 为什么你需要微前端架构 最近看到一个项目&#xff0c;单页应…...

cutlass代码架构分析

CUTLASS 代码架构分析 本文档基于 cutlass代码进行梳理,快速理解 CUTLASS 4.x 的模块边界与调用链路。 1. 总体架构 CUTLASS 本质上是一个 header-only 的 CUDA C++ 模板库,外围配套了可选构建目标: include/:核心库(cutlass + cute) tools/:库实例化、性能测试与通用…...

从 0 开始讲透 C++ Lambda(对标 Java)

在写 C 多线程或 STL 时&#xff0c;经常会看到这样的代码&#xff1a;std::thread t([]{ std::cout << "Hello C Thread\n"; });很多人第一反应&#xff1a;这 [] 是什么&#xff1f;为什么和 Java 不一样&#xff1f;一、先给结论&#xff08;先建立整体认知…...