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

HttpServletRequest和HttpServletResponse的获取与使用

相关笔记:【JavaWeb之Servlet】

在这里插入图片描述

文章目录

  • 1、Servlet复习
  • 2、HttpServletRequest的使用
  • 3、HttpServletResponse的使用
  • 4、获取HttpServletRequest和HttpServletResponse

1、Servlet复习

Servlet是JavaWeb的三大组件之一:

  • Servlet
  • Filter 过滤器
  • Listener 监听器

Servlet是运行在服务器上的一个Java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

Servlet接口的实现和继承关系如下,日常开发中直接继承HttpSerlvet类就好:

在这里插入图片描述

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到HttpServletRequest对象中,然后传递到上图中的service方法(doGet、doPost)中,用于给开发者来编写自己需要的逻辑。

2、HttpServletRequest的使用

常用方法:

  • getRequestURI() 获取请求的资源路径
  • getRequestURL() 获取请求的统一资源定位符
  • getRemoteHost() 获取客户端的IP地址
  • getHeader() 获取请求头
  • getParameter() 获取请求的参数
  • getParameterValues() 获取请求的参数(多个值的时候)
  • getMethod() 获取请求的方式GET、POST
  • setAttribute(key,value) 设置域数据
  • getAttribute(key)获取域数据
  • getRequestDispatcher() 获取请求转发对象

其中,Header和请求参数的相关方方法的类型与形参:

// 获取请求头数据,通过请求头名称获取值
String getHeader(String name)
// 获取所有请求头信息
Enumeration getHeaderNames()

请求参数:

// 获取请求参数通用方式(根据参数名称获取参数值) username=zhangsan
String getParameter(String name)
// 获取请求参数名称获取参数值的数组 hobby=xx&hobby=game
String[] getParameters(String name)
// 获取请求参数名称(与获取请求头方法类似)
Enumeration getParameterNames()
// 获取所有参数的Map集合
Map getParameterMap()
//....
Enumeration<String> enumeration = request.getParameterNames();  
Map<String,String> parameterMap = new HashMap<String,String>();
while (enumeration.hasMoreElements()){String parameter = enumeration.nextElement();  parameterMap.put(parameter,request.getParameter(parameter));  
}
//...

示例代码:

package com.llg.web;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Arrays;public class HttpServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String[] hobby = request.getParameterValues("hobby");System.out.println("username:" + username);System.out.println("password:" + password);System.out.println("hobby:" + Arrays.asList(hobby));System.out.println("URI:" + request.getRequestURI());System.out.println("URL:" + request.getRequestURL());System.out.println("Client_IP:"+request.getRemoteHost());System.out.println("User-Agent:" + request.getHeader("User-Agent"));System.out.println("Request-Method:" + request.getMethod());}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*** setCharacterEncoding方法设置请求的字符集为UTF-8,解决post请求的中文乱码问题* 注意要在获取请求参数之前调用*/request.setCharacterEncoding("UTF-8");System.out.println("-----POST-----");String username = request.getParameter("username");String password = request.getParameter("password");String[] hobby = request.getParameterValues("hobby");System.out.println("username:" + username);System.out.println("password:" + password);System.out.println("hobby:" + Arrays.asList(hobby));}
}

3、HttpServletResponse的使用

HttpServletResponse和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象传给Servlet程序使用。

HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,如果需要修改或设置返回给客户端的信息,则可通过HttpServletResponse对象来设置。

关于两个输出流:

  • 字节流 getOutputStream()方法,常用于下载(传递二进制数据)
  • 字符流 getWriter()方法,常用于回传字符串(用的多)

两个流不能同时使用。

在这里插入图片描述
运行:

在这里插入图片描述

给客户端回传信息:

在这里插入图片描述

运行:

在这里插入图片描述
注意回传中文信息,发生乱码时,需要设置字符集

//具体看文章开头的笔记【Servlet】
response.setHeader("Content-Type","text/html; charset=UTF-8");

4、获取HttpServletRequest和HttpServletResponse

除了正常的Tomcat打包传过来的HttpServletRequest和HttpServletResponse对象,也可以在其他地方自己获取。

途径一:直接注入

@Resource
private HttpServletRequest request;//@Autowired
@Resource
private HttpServletResponse response;

途径二:controller层中直接用

@GetMapping(value = "/abc/")
public String doSomething(HttpServletRequest request,HttpServletResponse response) {//...
}

途径三:从RequestContextHolder中获取

关于SpringMVC的RequestContextHolder:即持有上下文的Request容器,参考:https://developer.aliyun.com/article/908719

ServletRequestAttributes servletRequestAttributes =  (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
HttpServletResponse response = servletRequestAttributes.getResponse();

相关文章:

HttpServletRequest和HttpServletResponse的获取与使用

相关笔记&#xff1a;【JavaWeb之Servlet】 文章目录 1、Servlet复习2、HttpServletRequest的使用3、HttpServletResponse的使用4、获取HttpServletRequest和HttpServletResponse 1、Servlet复习 Servlet是JavaWeb的三大组件之一&#xff1a; ServletFilter 过滤器Listener 监…...

css在线代码生成器

这里收集了许多有意思的css效果在线代码生成器适合每一位前端开发者 布局&#xff0c;效果类&#xff1a; 网格生成器https://cssgrid-generator.netlify.app/ CSS Grid Generator可帮助开发人员使用CSS Grid创建复杂的网格布局。网格布局是创建Web页面的灵活和响应式设计的强…...

在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换

1.首先需要下载并安装openOffice,下载地址为&#xff1a; Apache OpenOffice download | SourceForge.net 2.安装后&#xff0c;可以测试下是否可用&#xff1b; 3.build.gradle中引入依赖&#xff1a; implementation group: com.artofsolving, name: jodconverter, version:…...

手机变电脑2023之虚拟电脑droidvm

手机这么大的内存&#xff0c;装个app来模拟linux&#xff0c;还是没问题的。 app 装好后&#xff0c;手指点几下确定按钮&#xff0c;等几分钟就能把linux桌面环境安装好。 不需要敲指令&#xff0c; 不需要对手机刷机&#xff0c; 不需要特殊权限&#xff0c; 不需要找驱…...

HDFS中的sequence file

sequence file序列化文件 介绍优缺点格式未压缩格式基于record压缩格式基于block压缩格式 介绍 sequence file是hadoop提供的一种二进制文件存储格式一条数据称之为record&#xff08;记录&#xff09;&#xff0c;底层直接以<key, value>键值对形式序列化到文件中 优…...

【MySQL】检索数据使用数据处理函数

函数 与其他大多数计算机语言一样&#xff0c;SQL支持利用函数来处理数据。函数一般是在数据上执行的&#xff0c;它给数据的转换和处理提供了方便。 函数没有SQL的可移植性强&#xff1a;能运行在多个系统上的代码称为可移植的。多数SQL语句是可移植的&#xff0c;而函数的可…...

【嵌入式学习笔记】嵌入式入门6——定时器TIMER

1.定时器概述 1.1.软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能有诸多缺点&#xff0c;如CPU死等、延时不精准。 void delay_us(uint32_t us) {us * 72;while(us--); }1.2.定时器定时原理 使用精准的时基&#…...

GD32F103输入捕获

GD32F103输入捕获程序&#xff0c;经过多次测试&#xff0c;终于完成了。本程序将TIMER2_CH2通道映射到PB0引脚&#xff0c;捕获PB0引脚低电平脉冲时间宽度。PB0是一个按钮&#xff0c;第1次按下采集一个值保存到TIMER2_CountValue1中&#xff0c;第2次按下采集一个值保存到TIM…...

[RT-Thread]基于ARTPI的文件系统认识与搭建

[写作为了记忆,个人最终输出的内容往往是遗忘后最容易捡起的内容,故以此作文] 目录 [写作为了记忆,个人最终输出的内容往往是遗忘后最容易捡起的内容,故以此作文] 前提 内容 认识 基于ARTPI的文件系统的挂载 ROMFS与LFS. &#xff08;默认自动挂载,romfs可读不可写) 搭…...

动态规划+二分查找

题目描述&#xff1a;给定一个区间数组&#xff0c;[[1,2,3],[3,4,2],[2,4,4]]&#xff0c;每个区间有价值&#xff0c;求在获取k个区间的条件下面&#xff0c;求获得的最大的价值&#xff0c;关键是dp的定义和二分查找的写法&#xff08;小于tar额最右下标&#xff09; import…...

8.2小非农ADP数据来袭黄金将会如何表现?

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a; 周二(8月1日)现货黄金价格回落&#xff0c;原因是美元指数升创7月10日以来新高至102.43.美联储官员乐观言论夯实美国经济软着陆预期。此外&#xff0c;中国刺激措施将…...

linux启动oracle

一、启动方法 方法1&#xff1a; Sql代码 cd $ORACLE_HOME/bin #进入到oracle的安装目录 ./dbstart #重启服务器 ./lsnrctl start #重启监听器 ----------------------------------- 方法2&#xff1a; &#xff08;1&#xff09; 以oracle身份登录​​数据库​​&am…...

AssetBundleBrowser导入报错解决方案

第一次导入AssetBundleBrowser遇到报错有 Assets\Scenes\AssetBundles-Browser-master\AssetBundles-Browser-master\Tests\Editor\ABModelTests.cs(13,7): error CS0246: The type or namespace name Boo could not be found (are you missing a using directive or an assem…...

vue-baidu-map-3x 使用记录

在 Vue3 TypeScript 项目中&#xff0c;为了采用 标签组件 的方式&#xff0c;使用百度地图组件&#xff0c;冲浪发现了一个开源库 ovo&#xff0c;很方便&#xff01;喜欢的朋友记得帮 原作者 点下 star ~ vue-baidu-map-3xbaidu-map的vue3/vue2版本&#xff08;支持v2.0、v…...

《GPU并行计算与CUDA编程》笔记

第一个GPU程序 #include <stdio.h>__global__ void square(float* d_out,float* d_in){int idx threadIdx.x;float f d_in[idx];d_out[idx] f * f; }int main(int argc,char** argv){const int ARRAY_SIZE 8;const int ARRAY_BYTES ARRAY_SIZE * sizeof(float);// …...

Shell编程基础(十二)函数

函数 概念定义调用函数综合脚本 概念 和其他编程语言一样&#xff0c;函数作为一种封装代码块&#xff0c;以提高代码复用性和可维护性的存在。 记住一点&#xff0c;先定义&#xff0c;再使用 定义 shell 函数的创建方式 function 函数名 空格{ xxxx return 返回码&#x…...

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…...

Screens 4 for mac VNC客户端 强大的远程控制工具

Screens 4 for Mac 是一款功能强大的 VNC 客户端软件&#xff0c;为 Mac 用户提供了便捷的远程访问和控制解决方案。无论您是需要远程管理服务器、办公电脑&#xff0c;还是需要远程协助他人解决问题&#xff0c;Screens 4 都是您的理想选择。 Screens 4 for Mac具备简洁直观的…...

搜索与图论(三)

一、最小生成树 1.1Prim算法 朴素版Prim 一般用于稠密图 算法流程: 集合表示当前已经在连通块的点 1.初始化距离&#xff0c;把所有距离都初始化为正无穷 2.n次迭代,找到集合外距离最小的点 ->t 3.用t来更新其它点到集合的距离 #include<iostream> #include&…...

阿里云“通义千问”开源,可免费商用

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 阿里云成为国内首个加入大模型开源行列的大型科技企业。就在昨天&#xff0c;阿里云公开表态&#xff0c;把自家的通义千问大模型开源。 阿里云把通用70亿参数模型&#xff0c;包括Qwen-7B和对话模…...

DeepSeek LeetCode 1125.最小的必要团队 public int[] smallestSufficientTeam(String[] req_skills, List<List

这是 LeetCode 1125 “最小的必要团队”问题。要求从候选人中选择一个最小的团队&#xff0c;使得团队成员的技能集合覆盖所有必需的技能。问题理解 有一个技能需求列表 req_skills&#xff0c;如 ["java", "python", "cpp"]有 people 列表&…...

智力能效:Token之上的竞争

AI软件竞争的本质是智力能效的竞争。 编者按 2025 年初, Anthropic 宣布 Claude API的价格比GPT-4高出50%。原本以为会出现的大量客户流失却在六个月后呈现出截然相反的走向&#xff1a;Claude在企业市场的采用率不仅没有下降&#xff0c;反而上升了。 过去两年&#xff0c;无数…...

Logisim实战:从零构建学号音乐盒的数字系统设计

1. Logisim与数字系统设计入门 第一次打开Logisim时&#xff0c;我盯着满屏的逻辑门和导线有点发懵。这个看起来像电路板绘图工具的家伙&#xff0c;真能做出会唱歌的音乐盒&#xff1f;经过两周的折腾&#xff0c;我不仅用学号显示音乐播放的完整系统交上了课程作业&#xff0…...

奇安信浏览器HEVC硬件解码优化指南:基于JM9显卡的实战配置

1. 为什么需要HEVC硬件解码优化 最近在折腾4K视频播放时&#xff0c;发现电脑风扇狂转&#xff0c;CPU占用直接飙到90%以上。查了下才发现是浏览器软解HEVC视频导致的&#xff0c;这种场景下显卡却在旁边"看戏"。后来发现奇安信浏览器搭配JM9显卡的硬件解码方案&…...

Harness Engineering 核心概念详解

文章目录1. Harness Engineering 的本质定义1.1 核心定义1.2 诞生的历史时刻1.3 "Harness" 的本意2. Agent Model Harness 核心公式2.1 公式解读2.2 LangChain 工程师的精炼定义2.3 类比&#xff1a;CPU 与操作系统3. Harness 三大支柱详解3.1 支柱一&#xff1a;上…...

OpenClaw性能优化:降低千问3.5-9B调用的Token消耗

OpenClaw性能优化&#xff1a;降低千问3.5-9B调用的Token消耗 1. 为什么需要关注Token消耗 去年冬天我第一次用OpenClaw对接千问3.5-9B模型时&#xff0c;被账单吓了一跳——一个简单的文件整理任务竟然消耗了将近2万Token。这让我意识到&#xff0c;在本地部署场景下&#x…...

STM32时钟系统架构与配置详解

1. STM32时钟系统架构解析STM32微控制器的时钟系统堪称整个芯片的"心脏"&#xff0c;它决定了处理器内核、外设以及总线的工作节奏。与人体需要心脏提供血液循环类似&#xff0c;STM32的各个功能模块都需要时钟信号来同步工作。理解时钟系统对于嵌入式开发者而言&…...

三态模型:**就绪**(已获除CPU外所有资源,等待调度)、**运行**(正在CPU执行)、**阻塞**(等待某事件如I/O完成,主动放弃CPU)

&#x1f539; 进程与线程 进程是资源分配的基本单位&#xff0c;拥有独立地址空间&#xff1b;线程是CPU调度的基本单位&#xff0c;同一进程内线程共享代码段、数据段和打开文件等资源&#xff0c;但有独立栈和寄存器上下文。线程切换开销远小于进程切换&#xff08;无需TLB刷…...

【AI工具】openclaw+离线模型

一、安装 1. 先换系统 apt 国内源&#xff08;阿里云&#xff09; # 1. 备份原来的源列表&#xff08;重要&#xff01;&#xff09; sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak# 2. 执行替换&#xff0c;换成清华源 sudo sed -i s/archive.ubuntu.com/mirror…...

别再让用户装Python了!手把手教你用PyInstaller把Tkinter小工具变成独立EXE

告别Python依赖&#xff1a;用PyInstaller打造零配置的Tkinter桌面应用 每次看到同事对着你开发的工具一脸茫然地问"Python是什么&#xff1f;pip又该怎么装&#xff1f;"&#xff0c;作为开发者的你是否感到深深的无力&#xff1f;这种技术鸿沟正在吞噬无数优秀工具…...