JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用

文章目录

  • 1.总括说明
  • 2.httpservlet父类
    • 2.1方法介绍
    • 2.2dopost方法的演示
    • 2.3doput方法的演示
  • 3.HttpServletRequest类
    • 3.1方法说明
    • 3.2方法使用演示
    • 3.3getparameter方法使用
    • 3.4使用form表单的方式
    • 3.5jackson获取参数
  • 4.HttpResponse类
    • 4.1设置状态码
    • 4.2自动进行刷新
    • 4.3重定向跳转
    • 4.3重定向跳转

1.总括说明

我们的这个servlet到底是学习什么的:一组api,操作这个http协议,这个这组api是由这个tomcat提供的;

我们的网站涉及到这个前后端之间的交互,使用的协议就是http协议,我们的这个服务器根据客户端发送来的这个请求进行解析,得出来这个对应的响应,再把这个响应发回给我们浏览器;

2.httpservlet父类

2.1方法介绍

我们对于这个类其实并不陌生,因为我们之前写的这个代码里面是我们自己定义的这个类继承这个父类的,这个类就是我们的父类,我们的实现的方法的重写也是重写的这个父类里面的方法;

我们之前使用的这个doget方法就是这个父类里面的一个方法,但是不知道大家注意到没有,这个里面好像并没有去写这个main方法,我们之前的学习内容里面的这个程序都是要有这个main方法的,这样才是可以正常运行的,但是我们的这个servlet里面的这个是没有主方法的;

这个实际上是因为我们的这个servlet就是为了处理这个http请求和相应的,主要的这个任务还是有这个tomcat完成的,我们的这个项目里面写的这个代码到这个一定的时候就会被这个tomcat里面的这个内容调用到,相当于这个就是我们后面学习的这个框架的雏形,我们写的这个代码实际上是嵌入到这个tomcat里面的,因为这个servlet处理这个请求和相应的这个大部分的逻辑都是一样的,变化的就是这个一些部分,而这个变化的就是我们去编写的这个代码;后面我们学习的这个框架也是这个逻辑;

image-20241103202546072

1)init完成初始化的工作;

2)service是在我们的这个服务器收到请求就会被调用;

3)destory就是我们创建的这个实例不使用的时候就会被执行一次;

上面的三个方法实际上就是我们的这个servlet的生命周期,生命周期就是我们的这个程序在什么时候会调用什么方法的这个过程;

上面的这三个方法实际上不会被经常使用,我们的这个service会被这个doget和dopost替代,因此这个使用到的这个可能性不是很大;

2.2dopost方法的演示

image-20241103214637760

我们使用这个postman发送这个请求:我们的这个选择需要是post,然后发送(这个前提是我们的这个路径需要正确配置,j1103的这个就是我们上面介绍的这个context path,后面的这个hello2就是我们的servlet path,这个都是我们上面介绍过的,这个都是和我们的这个IDEA里面的这个一一对应的;

我们可以看到这个send之后就会显示我们的这个sout里面的这个内容,对应的这个IDEA里面的这个日志里面也会输出这个对应的内容;

我们的这个文件是新建的,这个servlet是不可以和之前的重复的,因为我们的这个tomcat就是根据这个执行的,当我们的两个servlet path都是一样的时候我们的这个tomcat就不知道具体需要执行哪一个了;

image-20241103214712366

2.3doput方法的演示

我们的这个postman构造请求的时候,这个对应的也要选择这个put选项,这个路径是不变的,这个就会调用我们的代码里面的这个doput重写的方法;

image-20241103215237819

image-20241103215056153

3.HttpServletRequest类

3.1方法说明

这个类表示的就是我们的这个http里面的一个请求;

1)我们的这个第三个方法里面是这个uri不是我们熟悉的这个utl,这个URL通常会被当作这个URI进行使用,我们的这个URI类似于这个身份证号(唯一资源标识符),URL是唯一资源定位符(表示的就是地址),我们日常学习两个都是混着进行使用;

2)comtextpath就是我们在这个tomcat里面设置的第一级路径;

3)query string就是我们的这个查询字符串,一般都是以键值对的方式展现的,我们更多情况下是知道单个的键值对,而不是获取一长串;

4)最后一个是流对象,表示的是不定长的数据(可以一次处理一点,也可以一次性全部处理,也适合这个二进制相互匹配的);

image-20241103215258231

3.2方法使用演示

下面的这个就是在这个doget里面调用我们的这个类里面的这个api,这个时候打印出来这个相关的内容:

我们创建一个stringbuider对象,这个所有的结果储存到这个里面去,统一返回我们的这个客户端,下面的这个while就是获取这个所有内容,返回给我们的这个服务器;

image-20241103220848386

postman:我们的这个send之后下面的这个内容就是我们的这个字符串内容,我们使用这个里面的preview更好的对于这个结果进行查看;

image-20241103220908966

浏览器也是可以预览的:我们的这个浏览器里面看到的这个效果和我们的这个postman里面的这个内容是一样的;

image-20241103220930568

3.3getparameter方法使用

query string这个里面的键值对是我们程序员自定义的;实际进行开发的时候会经常使用这个query string这个键值对内容;

image-20241104183847645

如果我们的这个url里面只写这个前面内容:username和这个password的返回值都是null,但是如果写上这个username=zhangsan 和这个password=123456之后,我们的这个服务器就会对于这个里面的相关的参数进行获取到的,打印在我们的这个控制台上面;

image-20241104183941762

我们上面的这个url里面的这个user=zhnagsan 使用的就是英文,因此这个里面不会出现这个乱码的情况,如果我们写成这个username=张三,这个时候进行尝试会发现好像也是可以的;

但是我们最好是使用这个urlencoding工具把这个中文转换为这个对应的字符串之后再进行处理(直接使用这个网络上面的线程的urlencoding工具就可以了,我们输入这个张三,这个工具就会自动进行转换,我们把这个转换之后的结果换到这个username=()这个里面就可以了,这样是更加安全稳妥的);

3.4使用form表单的方式

这个就是我们对于这个dopost方法进行重写:

image-20241104190942469

我们在这个postman里面构造这个post请求,对于这个body里面的用户名和参数进行设计,点击发送之后,这个里面就会出现这个ok,同时我们的这个IDEA里面也会获取这两个参数;

image-20241104191045192

3.5jackson获取参数

引入这个依赖,需要从这个中央仓库下载;

在这个中央仓库里面去搜jackson,找到下面的这个,选择2.15版本吧(其他的应该也可以,但是没试过);

image-20241104192620082

image-20241104204954404

下面对于上面的这个方法的调用进行说明:

我们从这个inputstream这个输入流里面进行数据的读取,readvalue方法会对于从这个输入流里面读取的内容进行解析,解析成为这个map(键值对)第二个参数意义就是我们的这个map转换为这个java对象;

最后的这个respJson就是把我们的这个响应重新弄复原成为这个json数据,在我们的这个postman里面是可以看到这个效果的;

下面的这个是我们在这个postman里面的操作:

image-20241104205103225

4.HttpResponse类

4.1设置状态码

下面的这个是我们使用这个类里面的senerror进行这个错误页面的设置;

image-20241104211052939

这个postamn里面就会根据我们的这个senerror里面的这个参数对于错误页面进行设计;

image-20241104211131791

setstatus方法是对于这个状态码进行设置,我们的这个上面的这个注释里面是207,运行起来这个错误信息就会显示出来这个207状态码(这个相当于就是我们自定义的);

4.2自动进行刷新

我们这个类里面的这个还有一些更加花哨的玩法:就是这个setheader方法里面使用这refresh参数,这个就会对于我们的这个页面进行自动刷新;

image-20241104211710520

我们的这个postman里面会显示这个时间戳,但是这个不会进行刷新,我们把这个url放到这个浏览器的栏里面去,就会看到这个动态刷新的情景:

image-20241104211822261

4.3重定向跳转

下面的这个就是两个方式:

1)两行代码:设置状态码302,设置这个跳转的页面;

2)一行代码:直接指出来这个跳转的位置;

上面的两个效果是一样的;

image-20241104213025962
A-1730727338773)]

4.3重定向跳转

下面的这个就是两个方式:

1)两行代码:设置状态码302,设置这个跳转的页面;

2)一行代码:直接指出来这个跳转的位置;

上面的两个效果是一样的;

在这里插入图片描述

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

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

相关文章

矩阵起源 CEO 王龙出席 1024 超互联(苏州)总部节点发布会

10月24日,矩阵起源 CEO & 创始人王龙出席了由中关村超互联新基建产业创新联盟、数字人民币研究院联合主办,世纪互联承办的“超互联(苏州)总部节点发布会”,并分享了矩阵起源及世纪互联在多模态AI数据智能平台与超互…

大数据-202 数据挖掘 机器学习理论 - 决策树 sklearn 绘制决策树 防止过拟合

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

LTE及EPC技术原理(笔记)

无线网络发展历史 20世纪80年代:模拟技术和FDMA 20世纪90年代:数字技术和TDMA 21世纪初:数字技术和CDMA LTE进步 下行100Mbps,上行50Mbps 用户面时延10-20ms,控制面时延小于100ms 带宽从1.4MHz~20MHz&#xff0…

域用户账户与域组账户管理实战

Windows Server 通过建立账户(包括用户账户和组账户)并赋予账户合适的权限,保证使用网络和计算机资源的合法性,以确保数据访问、存储和交换服从安全需要。 如果是单纯的工作组模式的网络,需要使用“计算机管理”工具来管理本地用户和组&#…

C++类与对象(中)

类的默认成员函数 1. 默认成员函数,就是用户没有去显式实现,而编译器会自动生成的成员函数。 2. 对于⼀个类,一般情况下,编译器会默认生成6个默认成员函数。我们主要学习前面4个默认成员函数,对于后面两个默认成员函数…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中,选择Design Settings打开窗口,会有六个选项:DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

Python绘制爱心

文章目录 系列目录写在前面技术需求完整代码代码分析写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代…

C++ | Leetcode C++题解之第538题把二叉搜索树转换为累加树

题目: 题解: class Solution { public:TreeNode* getSuccessor(TreeNode* node) {TreeNode* succ node->right;while (succ->left ! nullptr && succ->left ! node) {succ succ->left;}return succ;}TreeNode* convertBST(TreeNo…

Linux基础命令(十)之 压缩命令 zip,gzip,bzip2,xz,tar

目录 一,zip和unzip 常见用法 二,gzip和ungzip命令 常见用法 三,bzip2和bunzip2命令 常见用法 四,xz和unxz命令 常见用法 五,归档命令tar 参数及其作用 常见用法 一,zip和unzip 语法:…

已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘

部署GPTSoVITS过程中,开启一键三连进程发生,报错AsyncRequest object has no attribute _json_response_data 具体报错内容为 (GPTSoVITS) PS D:\Code\GPT-SoVITS-beta0706> python webui.py Running on local URL: http://0.0.0.0:9874 IMPORTANT:…

ISUP协议视频平台EasyCVR视频融合平台接入各类摄像机的方法

安防视频监控ISUP协议视频平台EasyCVR兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 想要将摄像机顺利接入EasyCVR平台,实现视频监控的集中管理和分发&#x…

to_sql报错not all arguments converted during string formatting

报错: DatabaseError: Execution failed on sql SELECT name FROM sqlite_master WHERE typetable AND name?;: not all arguments converted during string formattingb 报错的代码如下: import pymysql import pandas as pd con pymysql.connect(…

7.机器学习--K-means算法(聚类)

聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。与分类模型需要使用有类标记样本构成的训练数据不同,聚类模型可以建立在无类标记的数据上,是一种非监督的学习算法。 聚类的输入是一组未被标记的样本&#xff…

GPIO子系统层次与数据结构详解

往期内容 本专栏往期内容: Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析:imx_pinctrl_soc_info结构体Pinctrl子系统中c…

干货丨通信网络与大模型的融合与协同

本文首发《中兴通讯技术》,2024年4月,第30卷第2期,作者:浙江大学在读本科生任天骐,浙江大学信息与电子工程学院副教授李荣鹏,浙江大学兼任教授、博士生导师张宏纲。边缘计算社区经过授权发布,以…

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DarkHole:1 通关详解 (附靶机搭建教程)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

对于一个STM32外设的应用有哪一些?可以列举一个实际的设计案例吗?

STM32 具有丰富的外设,以下是一些常见的应用: 1. **GPIO(通用输入输出)**: - 控制 LED 灯的亮灭。 - 读取按键状态。 - 与外部数字设备进行通信,如驱动数码管。 2. **USART(通用同步异步收发器…

iDP3——改进3D扩散策略以赋能人形机器人的训练:不再依赖相机校准和点云分割(含DP3、Diff-Control、ControlNet详解)

前言 今天10.23日,明天1024则将作为长沙程序员代表,在CSDN和长沙相关部门举办的1024程序员节开幕式上发言,欢迎广大开发者来长工作 生活 考察 创业,​包括我司七月也一直在招聘大模型与机器人开发人员 后天,则将和相关…

前端 react 面试题(二)

文章目录 hooks的使用规则为什么hooks要确保在函数组件的最顶层,而不能放置在循环或者条件语句中。react的事件模型react的合成事件是如何实现的react事件传参,可以使用箭头函数或bind方法,这两种哪一种更好使用箭头函数:使用`bind`方法:react的事件模型和vue的区别React …

【P2-10】ESP8266 WIFI模块连接原子云服务器与原子云APP通信

前言:本节实现ESP8266 WIFI模块连接原子云服务器与原子云APP通信。 演示视频: 【物联网】ESP8266 WIFI模块连接原子云服务器与原子云APP通信 目录 1.WIFI模块连接原子云服务器互相通信 2.WIFI模块与原子云APP通信 1.WIFI模块连接原子云服务器互相通信 原子云服务器登陆入…