Javaweb - 10.1 Servlet

目录

Servlet 简介

动态资源和静态资源

Servlet 简介

Servlet 开发流程

目标

开发过程

开发一个 web 类型的 module

开发一个 form 表单

开发一个 UserServlet

在 web..xml 为 userServlet 配置请求路径

Edit Configurations

启动项目

完!


Servlet 简介

动态资源和静态资源

静态资源:

        无需在程序运行时,通过代码生成的资源,在程序运行之前就写好的资源。例如:html css js img 音频 视频文件

动态资源:

        需要在程序运行时,通过代码生成的资源,在程序运行之前,无法确定的数据,运行时动态生成。例如:Servlet Thymeleaf......

        动态资源指的不是视图上的动态效果,而是简单的人机交互效果~

举个栗子:

        去蛋糕店买蛋糕:

                我们直接买柜台上已经做好的:静态资源

                我们和店员提出要求后现场定制一个:动态资源

Servlet 简介

Servlet(server applet)是运行在服务端(Tomcat)的 Java 小程序,是 sun 公司提供一套定义动态资源的规范,代码层面上 Servlet 就是一个接口

        用来接收 处理客户端请求 响应给浏览器的动态资源。在整个 Web 应用中,Servlet 主要负责接收处理请求,协同调度功能以及响应数据。我们可以把 Servlet 称作为 Web 应用中的控制器。

        不是所有的 Java 类都能用于处理客户端请求,能处理客户端请求,并做出响应的一套技术标准就是 Servlet

        Servlet 是运行在服务端的,所以 Servlet 必须在 Web 项目中开发并且在 Tomcat 这样的服务器容器中运行。

        Servlet 主要起一个承上启下的作用

Servlet 开发流程

目标

实现功能:校验注册时,用户名是否被占用。通过客户端向 Servlet 发送请求,携带 username,如果用户名是 “admin”,则向客户端响应 NO,如果是其它,响应 YES

开发过程

开发一个 web 类型的 module

上篇文章已经有所介绍,此处进行复习

开发一个 form 表单

在 web 目录下,开发一个 form 表单,向servlet发送一个GET请求并携带username参数

这里的 action 先空着,因为我们还没有写 servlet 的代码~

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form method = "get" action = "">用户名:<input type = "text" name = "username"><br/><input type="submit" value = "校验">
</form></body>
</html>

开发一个 UserServlet

在 src 目录下面创建一个 UserServlet 类

如果直接 implements Servlet 的话,需要重写下面四个方法,比较繁琐

我们直接可以 extends HttpServlet

package com.zzz.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;/** @author zzr* @date: 2025/07/03  20:49* @description: 验证用户名的Servlet*/
public class userServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1. 获取请求中的键值对参数 key=value (根据参数名获取参数 无论参数在 usl? 后面,还是在请求体中,都能获取)String username = request.getParameter("username");// 2.处理业务的代码String info = "YES";if ("admin".equals(username)) {info = "NO";}// 3. 将要响应的数据放入 responsePrintWriter writer = response.getWriter(); //该方法返回的是一个向响应体中打印字符串的打印流writer.write(info);}
}

注意:

        1. 自定义一个类,要继承 HttpServlet 类

        2. 重写 service 方法,该方法主要就是处理用户的请求

        3. HttpServletRequest 代表请求对象,是由请求报文,经过 Tomcat 转换而来的,通过该对象,可以获取请求中的信息

        4. HttpServletResponse 代表响应对象,该对象会被 Tomcat 转换为响应的报文,通过该对象,可以设置响应中的信息。

        5. Servlet 对象的生命周期(创建,初始化,处理服务,销毁)都是由 Tomcat 自己管理的,不需要我们干预。

        6. HttpServletRequest 和 HttpServletResponse 两个对象也是由 Tomcat 自动和 报文来转换的,在调用 service 方法传入给我们的~

在 web..xml 为 userServlet 配置请求路径

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><!--    1. 配置 servlet 类,并起一个别名servlet-class 告诉 Tomcat 对应的要实例化的 servlet 类servlet-name  用于关联请求的映射路径
--><servlet><servlet-name>userServlet</servlet-name><servlet-class>com.zzz.servlet.userServlet</servlet-class></servlet>
<!--    映射路径  --><servlet-mapping><servlet-name>userServlet</servlet-name><url-pattern>/userServlet</url-pattern></servlet-mapping>
</web-app>

这里配置完映射路径后,url-pattern 中的路径是什么,我们的 html 页面中 form 表单要提交的 action 就是什么~

补充:

        1. Servlet 并不是文件系统中实际存在的文件或目录,为了能够请求到该资源,需要为其配置映射路径

        2. Servlet 的请求映射路径配置在 web.xml 中

        3. <servlet-name> 作为 servley 的别名,见名知意即可,随意定义

        4. <usl-pattern> 标签用于定义 servlet 的请求映射路径

        5. 一个 servlet 可以对应多个不同的 <url-pattern>

        6. 多个 sevlet 不能使用相同的 <url-pattern>

Edit Configurations

先将我们之前部署的项目删除掉~

再部署我们的 web02~

启动项目

使用 debug 模式运行测试,访问 index.html,提交表单测试

打个断点,debug 模式运行

自动会跳到 index.html 页面(index.html 页面是会默认跳出的页面~)

输入 zzz 点击校验,因为我们的断点,浏览器等待响应,转小圆圈

然后进入 IDEA,查看,收到了我们的 “zzz”,

全部放通后,最终浏览器响应 YES

完!

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

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

相关文章

手机能用酒精擦吗?

对于电视、电脑屏幕来说&#xff0c;为了避免反光、改善显示效果&#xff0c;会在屏幕表面覆上一层“抗反射涂层”。不同厂商设计的涂层材料并不相同&#xff0c;酒精作为良好的溶剂&#xff0c;确实会损坏可溶的涂层。手机作为触控产品&#xff0c;通常会在屏幕表面增加“疏水…

【图像处理基石】图像超分辨率有哪些研究进展值得关注?

近年来&#xff0c;图像超分辨率&#xff08;SR&#xff09;领域在深度学习技术的推动下取得了显著进展&#xff0c;尤其在模型架构优化、计算效率提升和真实场景适应性等方面涌现出诸多创新。以下是基于最新研究的核心进展梳理&#xff1a; 一、高效大图像处理&#xff1a;像素…

Windows系统下WSL从C盘迁移方案

原因&#xff1a;一开始装WSL的时候放在了C盘&#xff0c;这下好了&#xff0c;跑了几个深度学习模型训练后&#xff0c;C盘快满了&#xff0c;这可怎么办&#xff1f;可愁坏了。没关系&#xff0c;山人自有妙计。我们将WSL迁移到D盘或者E盘呀。一.迁移操作步骤前期准备&#x…

金融时间序列机器学习训练前的数据格式验证系统设计与实现

金融时间序列机器学习训练前的数据格式验证系统设计与实现 前言 在机器学习项目中&#xff0c;数据质量是决定模型成功的关键因素。特别是在金融时间序列分析领域&#xff0c;原始数据往往需要经过复杂的预处理才能用于模型训练。本文将详细介绍一个完整的数据格式验证系统&…

cocos2dx3.x项目升级到xcode15以上的iconv与duplicate symbols报错问题

cocos2dx3.x项目升级xcode15以上后会有几处报错。1. CCFontAtlas.cpp文件下的iconv与iconv_close的报错。修改如下&#xff1a;// iconv_close(_iconv);iconv_close((iconv_t)_iconv);iconv((iconv_t)_iconv, (char**)&pin, &inLen, &pout, &outLen); /…

HTTP/3.0的连接迁移使用连接ID来标识连接为什么可以做到连接不会中断

一定要结合图文一起理解&#xff01;&#xff01; 文章目录文字描述传统方式&#xff1a;HTTP/2 基于 TCP 的连接&#xff08;就像打固定电话&#xff09;HTTP/3 基于 QUIC 的连接迁移&#xff08;就像用带“通话ID”的手机&#xff09;总结一下图文详解HTTP2.0传统方式&#x…

让工作效率翻倍的终极神器之被工具定义的编程时代(VS Code + GitHub Copilot + JetBrains全家桶)

目录一、引言&#xff1a;被工具定义的编程时代二、背景&#xff1a;传统开发模式的效率瓶颈2.1 认知负荷过载2.2 工具链断层三、效率翻倍工具链深度解析3.1 智能代码编辑器&#xff1a;从打字机到智能助手3.2 版本控制大师&#xff1a;Git的隐藏技能3.3 自动化脚本&#xff1a…

docker部署单机gitlab

环境准备&#xff1a; 证书&#xff1a; acme.sh --issue --dns dns_ali -d gitlab.chandz.com -d *.chandz.comcp /root/.acme.sh/gitlab.chandz.com_ecc/* /data/docker-data-volume/gitlab/ssl/目录&#xff1a; mkdir -p /data/docker-data-volume/gitlab cd /data/docker-…

【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南

文章目录架构概览先决条件部署方案选择方案一&#xff1a;手动 YAML 部署核心组件详解方案二&#xff1a;Helm快速部署&#xff08;生产推荐&#xff09;验证部署DNS配置策略方案A&#xff1a;单域名映射方案B&#xff1a;通配符映射&#xff08;推荐&#xff09;应用实战&…

SHA-256算法详解——Github工程结合示例和动画演示

近日笔者在学习区块链的相关知识&#xff0c;接触到SHA-256算法&#xff0c;这里做一个知识梳理和总结。 强烈推荐大家自行去学习下面链接github上的工程&#xff0c;作者的动画演示和解释做的非常出色&#xff0c;逻辑非常清晰&#xff0c;B站搬运的对应的油管的讲解视频也放…

C语言模块化编程思维以及直流电机控制(第四天)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-削好皮的Pineapple! &#x1f468;‍&#x1f4bb; hello 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 削好皮的Pineapple! 原创 &#x1f468;‍&#x1f4…

【PTA】数据结构与算法0001:1025 反转链表

文章大纲写在前面测试用例ac代码学习代码知识点小结写在前面 实现思路 结构体封装数据 根据order重新排序k区间值迭代翻转 n整除k&#xff0c;则最后地址输出"-1"非整除&#xff0c;最后剩余区间&#xff0c;原序输出。最后地址输出"-1" 题目有难度&…

深入解析 .NET 泛型:从原理到实战优化

在现代软件开发中&#xff0c;代码复用性和性能优化是开发者永恒的追求。.NET 泛型作为一项强大的语言特性&#xff0c;不仅能够帮助我们消除重复代码&#xff0c;还能显著提升代码的类型安全性和运行效率。本文将带你全面了解 .NET 泛型&#xff0c;从基本概念到高级用法&…

Excel 处理软件 内容复制工具:工作表批量复制 + 合并拆分简洁操作零门槛

各位办公小能手们&#xff01;今天给你们介绍一款超牛的软件——Excel内容复制工具。软件下载地址安装包 这可是专门为了让Excel数据处理效率蹭蹭往上涨而设计的辅助软件呢&#xff01;它的主要功能可多啦&#xff0c;能批量复制工作表&#xff0c;还能把好多表格合并到同一个…

【机器学习实战笔记 14】集成学习:XGBoost算法(一) 原理简介与快速应用

《XGBoost算法》 推荐的学习路径&#xff1a; 【快速实现XGBoost、跑通代码】- 第一部分 【快速掌握XGBoost应用、达到自由调参水平】- 第一部分~第三部分 【快速掌握XGBoost原理、面试得以通关】- 第一部分1 第二部分1.2、2.2 第四部分 目录《XGBoost算法》一 XGBoost的基…

.NET AI 模板

引言 随着人工智能技术的快速发展&#xff0c;AI应用开发已成为开发者必备的技能之一。然而&#xff0c;对于许多.NET开发者来说&#xff0c;如何快速上手AI开发仍然是一个挑战。微软推出的.NET AI模板预览版正是为了解决这一问题而生&#xff0c;为开发者提供了构建智能聊天应…

EFK9.0.3 windows搭建

背景 最近某个功能要使用到ELK&#xff08;ElasticSearch、Logstash、Kibana&#xff09;采集日志&#xff0c;对数据进行分析&#xff0c;网上百度了一下&#xff0c;目前推荐不使用Logstash而使用Filebeat ,即EFK。 下载链接 Elasticsearch Kibana Filebeat 安装前提 …

上海新华医院奉贤院区:以元宇宙技术重构未来医疗生态

引言&#xff1a;当医疗遇上元宇宙在数字化转型的浪潮中&#xff0c;上海新华医院奉贤院区以"智慧医院"为定位&#xff0c;率先构建了"元宇宙医院"雏形。通过AI大模型、三维影像分析、AR手术导航等前沿技术的深度融合&#xff0c;医院正在打造一个覆盖全周…

知识竞赛答题pk小程序用户操作手册

知识竞赛答题 PK 小程序用户操作手册 一、注册与登录 用户首次使用答题pk小程序需上传头像&#xff0c;输入昵称&#xff0c;并选择加入团队。如果是企业内部人员使用可开启白名单功能。二、进入答题 PK 模式 登录后&#xff0c;在小程序首页&#xff0c;您可以看到 “单人挑战…

等大小谱聚类

聚类是一种将具有相似特征的数据点进行分组的方法。它广泛应用于探索性数据分析&#xff0c;并已被证明在模式识别、市场和客户细分、推荐系统、数据压缩以及生物数据分析等许多应用中都发挥着重要作用。 尽管聚类算法种类繁多&#xff0c;但没有一种能够生成点数均衡的聚类。…