【Java EE初阶二十四】servlet的深入理解

 1. Servlet API 的学习

        下面主要学习这三个类,就已经可以完成 Servlet 的大部分开发了;

1. Httpservlet
2. HttpServletRequest
3. HttpServletResponse

2. Httpservlet的学习

2.1 Httpservlet在tomcat的工作原理

        写一个 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 java.io.IOException;@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//把这句话打印在tomact的控制台上(服务器上)System.out.println("hell0 word");//把内容显示到页面上,把hello word字符串作为http响应的body部分//这个部分就会被浏览器显示在页面上resp.getWriter().write("hello word");}
}

        servlet这里的代码,只需要继承httpservlet就行,不必写一个main方法;

        HttpServlet,继承这个类,重写里面的方法,目的就是为了把咱们自己定义的代码,“插入到" tomcat ”中;

        简单了解其工作原理如下:

        在 tomcat 中,就有形如以下这样的代码:

        // 先通过 tcp socket 读取请求. http 也是基于 tcp
        String requestString = readRequest();
        // 解析这个请求
        HttpServletRequest reg = parse(requestString);
        // 构造空的响应对象
        IttpServletResponse = new HttpServletResponse();

        // 创建一个 HttpServlet 对象.
        Htpservlet s = new Helloservlet();------->Tomcat 能够自动的 new 出一个咱们写的子类;

        

        进一步的,也就相当于,让咱们的代码"嵌入到"tomcat 内部运行了;

2.2 Httpservlet 的方法

        一个 Servlet 不用了,说明 Tomcat 要关闭了,Tomcat 关闭有两种方式:
        1.直接干掉 Tomcat 进程 (比如直接在任务管理器中结束任务或者直接一点x), 完全来不及调用 destroy 的.
        2.通过 8005 管理端口,给 Tomcat 发送一个"停机"指令.这个时候是能够执行 destroy 的.

        关于servlet和Httpservlet的理解:

servlet:一组 api, 由tomcat 提供的来操作 http 协议的,也可以理解成是一个 HTTP 服务器框架;写网站的时候主要的工作步骤如下:1接收前端传来的 http 请求,并解析;2根据 http 请求计算出一个 http 响应;3HttpServlet把 http 响返回到浏览器这边

Httpservlet:一般需要继承这个类,并重写里面的方法,最后把重写的代码插入到 Tomcat 的既定流程之中;

 3. HttpServletRequest

        HttpServletRequest表示了一个 HTTP 请求;

3.1 关于HttpServletRequest的一些方法 

        上述介绍的方法,都是 get 系列的方法 (都是读方法),没有 set 系列 (没有写方法),我们当前拿到的 HttpServletRequest,这里的数据都是来自于客户端发来的,这些数据的内容已经确定下来了,我们是不应该修改的; 

        下面主要通过postman构造http请求,观察服务器的相关响应:

        最终浏览器得到服务器返回的响应:

3.2 在服务器获取请求中的参数.(Query String)

        query string 中的键值对, 都是程序猿自定义的,实际开发中都会非常广泛的使用到 qrery string 这样的机制,如下图所示:

        1、http请求中没有query string

        

         1、http请求中有query string

3.3 通过 http 请求的 body 来传递参数(POST)

        1)、直接通过 form 表单(body 的格式就是 query string 的格式)
        Content-Type: application/x-www-form-urlencoded

        前端往后端传输数据并顺利拿到:

        该方式能被servlet支持;

        2)、直接使用 json
        (body 的格式就是json),Content-Type: application/json  

        json 本质上也是键值对,规则和 form 表单截然不同,解析方式自然也就变了,由于json 支持“嵌套”,因此自己手写解析 jon 的代码,并不容易的,其嵌入结构如下所示:

        该方式不能被servlet支持,所以要下载第三方库;此处为了针对 json 格式的数据进行解析和构造,就需要引入 json 的库;java 世界中,json 的第三方库是非常多的.咱们使用的叫做 jackson,下载第三方库如下:

        1)下载导入jackson 到项目中.通过 maven:

        2)使用 jackson

 一个类,两个方法:

        ObjectMapper:对象映射器;

        把json 字符串,映射成一个 Java 的对象,读方法;

        把一个java 对象,映射成json 字符串,写方法;

 使用逻辑如下:

        网络传输的时候:使用 json 字符串;

        站在服务器的角度:收到的请求,就是json 字符串.,需要把 json 字符串,先映射成java 对象,再进行一系列的业务逻辑处理,处理完了之后,可能还需要把得到的java 对象,映射回json字符串,并且通过响应来返回;

        图解对象映射器的分析如下:

1、读方法

        

        关于java.class文件的详细了解:

        细节处理:

  2、写方法

该端代码的分析:

3、postman构造请求:

        postman 对于json 格式要求比较严格,key 必须加上 引号;

4. HttpServletResponse

        HttpServletResponse的方法:

        response 里的 api 都是 set 系列的方法,request 里的 api 都是 get 系列的方法;

        有时候请求得到的响应,光是一个状态码但是 body 是空,不太友好,浏览器上是不会直接显示状态码,如下图所示:

        ps:本次的学习就到这里了,如果大家感兴趣的话,就请一键三连哦!!!

        

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

跟随realworldCTF,做一个http网络协议黑客

前言 本报告旨在对RealWorldCTF 2024体验赛中的Pwn方向题目——"Be-an-HTPPd-Hacker"进行深入解析和讲解。该题目涉及一个十一年前的项目,其基于C语言实现了HTTP协议。我们将通过对该协议进行栈溢出攻击,探索真实世界中的攻击手法,…

PostgreSQL索引篇 | BTree

B-Tree索引 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我) B树特点: 非叶子节点含一个或多个关键字值和子节点指针,不指向实际数据的存储位置所有关键字都是叶子节点,每个叶…

React18源码: schedule任务调度messageChannel

React调度原理(scheduler) 在React运行时中,调度中心(位于scheduler包)是整个React运行时的中枢(其实是心脏),所以理解了scheduler调度,就基本掌握了React的核心React两大循环:从宏…

git修改及合并commit提交

在开发过程中,保持代码记录清晰会更方便追踪,对代码审核人员也更有便宜。 修改commit提交 比如我们刚提交了一个commit,但之后要追加代码到已经推送到远程仓库的提交中,这时我们可以选择修改commit提交,使新的更改也推…

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏,知来者犹可追 创作不易,宝子们!如果这篇文章对你们…

Sora - 探索AI视频模型的无限可能

随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨Sora的技术特点、应用场景以及对未…

悄悄话花费的时间(C语言)

题目描述 给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

【Docker】初学者 Docker 基础操作指南:从拉取镜像到运行、停止、删除容器

在现代软件开发和部署中,容器化技术已经成为一种常见的方式,它能够提供一种轻量级、可移植和可扩展的应用程序打包和部署解决方案。Docker 是目前最流行的容器化平台之一,它提供了一整套工具和技术,使得容器的创建、运行和管理变得…

Linux(ACT)权限管理

文章目录 一、 ATC简介二、 案例1. 添加测试目录、用户、组,并将用户添加到组2. 修改目录的所有者和所属组3. 设定权限4. 为临时用户分配权限5. 验证acl权限 6. 控制组的acl权限 一、 ATC简介 ACL(Access Control List,访问控制列表&#xf…

GPT-SoVITS 快速声音克隆使用案例:webui、api接口

参考: https://github.com/RVC-Boss/GPT-SoVITS 环境: Python 3.10 PyTorch 2.1.2, CUDA 12.0 安装包: 1、使用: 1)下载项目 git clone https://github.com/RVC-Boss/GPT-SoVITS.git2)下载预训练模型 https://huggingface.co/lj1995/GPT-SoVITS 下载模型文件放到GPT…

NXP实战笔记(八):S32K3xx基于RTD-SDK在S32DS上配置LCU实现ABZ解码

目录 1、概述 2、SDK配置 2.1、IO配置 2.2、TRGMUX配置 2.3、LCU配置 2.4、Trgmux配置 2.5、Emios配置 2.6、代码实现 1、概述 碰到光电编码器、磁编码器等,有时候传出来的位置信息为ABZ的方式,在S32K3里面通过TRGMUX、LCU、Emios结合的方式可以实现ABZ解码。 官方…

【深入理解设计模式】建造者设计模式

建造者设计模式 建造者设计模式(Builder Pattern)是一种创建型设计模式,旨在通过将复杂对象的构建过程拆分成多个简单的步骤,使得相同的构建过程可以创建不同的表示。该模式允许您使用相同的构建过程来创建不同的对象表示。 概述…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的疲劳驾驶检测系统(Python+PySide6界面+训练代码)

摘要:本研究详述了一种采用深度学习技术的疲劳驾驶检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别疲…

AI工具新革命:从ChatGPT到Sora,生成式AI改变世界

这个春节着实精彩,“春山学”吃透了,不如把目光移向OpenAI又一重磅产品——文生视频大模型Sora。智能新纪元已然开启,因为正如周鸿祎所说:“,Sora的诞生意味着AGI(通用人工智能)的实现将从10年缩短到1年。”…

为什么选择 SaaS SIEM ?

当今的企业越来越依赖技术,这意味着无懈可击的网络安全的重要性怎么强调也不为过。随着组织应对现代数字生态系统的复杂性,维护系统的完整性已不再只是“可有可无”,而是一种必需。  这就是安全信息和事件管理 (SIEM)作为网络安全中最重要…

Stable Diffusion 绘画入门教程(webui)-ControlNet(Seg)

上篇文章介绍了深度Depth,这篇文章介绍下seg(Segmentation) 意思为语义分割, 通俗理解就是把图中的不同物体元素按类别不同,标为不同的颜色,不同的颜色代表不同的元素类别,如下图,左边为原图&a…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的人脸表情识别系统(附完整资源+PySide6界面+训练代码)

摘要:本篇博客呈现了一种基于深度学习的人脸表情识别系统,并详细展示了其实现代码。系统采纳了领先的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期版本进行了比较,展示了其在图像、视频、实时视频流及批量文件中识别人脸表情的高…

洛谷 P1038 [NOIP2003 提高组] 神经网络【拓扑序处理】

原题链接:https://www.luogu.com.cn/problem/P1038 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一…

动态绑定样式,uniapp,用三元运算动态绑定多个class类样式,动态绑定的样式可以和原始样式共存

介绍 | uni-app官网 vue、uniapp中动态添加绑定style、class 9种方法实现_vue style动态绑定-CSDN博客 uniapp使用三元运算符动态绑定元素的style样式_uniapp style动态绑定-CSDN博客 对象写法,可以写多个class类 class类的名字:判断条件,最后结果只有…

【TEE论文】硬件辅助安全全面调查:从边缘到云(综述)

原文:A comprehensive survey of hardware-assisted security: From the edge to the cloud 1. 引言 从在中央存储库(例如云主机)中处理收集的传感器数据的传统部署,到更高级的解决方案,例如新兴的边缘计算领域&…