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

news2024/11/8 14:05:46

文章目录

  • 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.coloradmin.cn/o/2235867.html

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

相关文章

前后端分离,Jackson,Long精度丢失

案例:后端接口放回一个Long数据 GetMapping("/testForLong")public Map<String, Object> testForLong() {Map<String, Object> map new HashMap<>();map.put("aaa", 1234567890123456789L);return map;}实际前端接收的数据 前后端数据…

记某单位众测项目漏洞挖掘中的一些手法

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 一个想当文人的黑客 &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【edusrc漏洞挖掘】 【VulnHub靶场复现】【面试分析】 &#x1f389;欢迎…

用 Python 写了一个天天酷跑(附源码)

Hello&#xff0c;大家好&#xff0c;给大家说一下&#xff0c;我要开始装逼了 这期写个天天酷跑玩一下叭&#xff01; 制作一个完整的“天天酷跑”游戏涉及很多方面&#xff0c;包括图形渲染、物理引擎、用户输入处理、游戏逻辑等。由于Python是一种高级编程语言&#xff0c;…

芯片设计公司ERP系统如何实现一体化管理

在当今高科技迅猛发展的时代&#xff0c;芯片设计行业作为信息技术的核心&#xff0c;正面临着日益激烈的市场竞争和复杂多变的市场需求。为了提升企业的运营效率和市场竞争力&#xff0c;芯片设计公司纷纷引入ERP(企业资源计划)系统&#xff0c;以实现一体化管理。接下来我们跟…

50岁+人群月活超1亿,短剧迎来新对手,小程序游戏“收割”中老年

抢夺中老年流量&#xff1a;微短剧向左&#xff0c;小游戏向右 作者&#xff5c;AgeClub 干货抢先看 1.《黑神话&#xff1a;悟空》走红&#xff0c;吸引大量玩家入坑单机市场。与硬核单机游戏不同&#xff0c;在渗透率更高的小游戏领域&#xff0c;聚集了更多“网瘾”中老年…

手机如何打开chm文件

chm文件一般是帮助文档&#xff0c;手机一般不能直接打开&#xff0c;我们可以通过下载阅读器来打开 以荣耀手机为例 首先下载掌阅iReaderAPP 下载完成后打开掌阅 点击书架&#xff0c;右上角本机导入 搜索你下载的chm文件的名字 勾选&#xff0c;加入书架(应该保留目录) 在书…

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…

【算法与数据结构】【链表篇】【题1-题5】

题1.从尾到头打印链表 题目&#xff1a;输入一个链表的头结点&#xff0c;从尾到头反过来打印出每个节点的值。链表的定义如下&#xff1a; struct ListNode {int mValue;ListNode *mNext;ListNode *mPrev; }; 1.1 方法一&#xff1a;栈 思路&#xff1a;要反过来打印&…

28.医院管理系统(基于springboot和vue)

目录 1.系统的受众说明 2. 相关技术和开发环境 2.1 相关技术 2.1.1 Java语言 2.1.2 HTML、CSS、JavaScript 2.1.3 Redis 2.1.4 MySQL 2.1.5 SSM框架 2.1.6 Vue.js 2.1.7 SpringBoot 2.2 开发环境 3. 系统分析 3.1 可行性分析 3.1.1 经济可行性 3.1.2 技术…

Mysql基础 01 数据与sql

文章目录 一、基本概念二、mysql的常用命令三、sql规范四、数据类型五、SQL语句 一、基本概念 数据库(database,DB)&#xff1a;存储数据的仓库。 数据库管理系统软件(Database Management System,DBMS)&#xff1a;是一种操作和管理数据库的大型软件。常见的DBMS有oracle、s…

爬虫-------字体反爬

目录 一、了解什么是字体加密 二. 定位字体位置 三. python处理字体 1. 工具库 2. 字体读取 3. 处理字体 案例1:起点 案例2:字符偏移: 5请求数据 - 发现偏移量 5.4 多套字体替换 套用模板 版本1 版本2 四.项目实战 1. 采集目标 2. 逆向结果 一、了解什么是…

数据分析:宏基因组DESeq2差异分析筛选差异物种

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理:计算步骤:结果:加载R包准备画图主题数据链接导入数据Differential abundance (No BP vs 2BP TA)构建`countData`矩阵过滤低丰度物种构建DESeq数据对象DESeq2差异分析画图Di…

【手撕排序2】快速排序

&#x1f343; 如果觉得本系列文章内容还不错&#xff0c;欢迎订阅&#x1f6a9; &#x1f38a;个人主页:小编的个人主页 &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ✌️ &#x1f91e; &#x1f91f; &#x1f918; &#x1f919; &#x1f448; &…

OpenCV自学系列(1)——简介和GUI特征操作

与另一个计算机视觉系列相对应&#xff0c;本系列主要探索OpenCV的具体操作。 学习资源&#xff1a;官网教程 https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.htmlhttps://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html 所有源码均上传至仓库&#xff1a; http…

KION Group EDI 需求分析

梳理EDI需求资料 KION Group将EDI项目中需要的资料公开在其官网上&#xff0c;企业可以点击在 KION Group 官网下载 EDI需求资料 企业可以在以上网址中获取到如下资料&#xff1a; 1.KION Group EDI团队的联系信息以及EDI连接信息 KION Group EDI团队支持7*24小时的支持&am…

OpenDroneMap Webodm

OpenDroneMap & Webodm OpenDroneMap Webodm 开源无人机航拍系列图像及其它系列图像三维重建软件。很棒的开源无人机测绘软件OpenDroneMap,从航拍图像生成精确的地图、高程模型、3D 模型和点云。 应用领域 Mapping & Surveying 测绘和测量 从图像测量获得高精度的可…

计算机网络——网络层导论

转发是局部功能——数据平面 路由是全局的功能——控制平面 网卡 网卡&#xff0c;也称为网络适配器&#xff0c;是计算机硬件中的一种设备&#xff0c;主要负责在计算机和网络之间进行数据传输。 一、主要功能 1、数据传输&#xff1a; 发送数据时&#xff0c;网卡将计算机…

从0开始深度学习(26)——汇聚层/池化层

池化层通过减少特征图的尺寸来降低计算量和参数数量&#xff0c;同时增加模型的平移不变性和鲁棒性。汇聚层的主要优点之一是减轻卷积层对位置的过度敏感。 1 最大汇聚层、平均汇聚层 汇聚层和卷积核一样&#xff0c;是在输入图片上进行滑动计算&#xff0c;但是不同于卷积层的…

深度学习笔记10-多分类

多分类和softmax回归 在多分类问题中&#xff0c;一个样本会被划分到三个或更多的类别中&#xff0c;可以使用多个二分类模型或一个多分类模型&#xff0c;这两种方式解决多分类问题。 1.基于二分类模型的多分类 直接基于二分类模型解决多分类任务&#xff0c;对于多分类中的每…

接口测试面试题及答案(后续)

一、你们什么时候测试接口 一般有需求就会做&#xff0c;后台的接口开发好&#xff0c;就可以开始测。例外&#xff0c;如果增加了新需求&#xff0c;也要做接口测试&#xff0c;还有就是开发对后台的接口做了修改&#xff0c;交互逻辑发生变化&#xff0c;我们也要重新对接口…