当前位置: 首页 > 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();
http://www.lryc.cn/news/110742.html

相关文章:

  • css在线代码生成器
  • 在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换
  • 手机变电脑2023之虚拟电脑droidvm
  • HDFS中的sequence file
  • 【MySQL】检索数据使用数据处理函数
  • 【嵌入式学习笔记】嵌入式入门6——定时器TIMER
  • GD32F103输入捕获
  • [RT-Thread]基于ARTPI的文件系统认识与搭建
  • 动态规划+二分查找
  • 8.2小非农ADP数据来袭黄金将会如何表现?
  • linux启动oracle
  • AssetBundleBrowser导入报错解决方案
  • vue-baidu-map-3x 使用记录
  • 《GPU并行计算与CUDA编程》笔记
  • Shell编程基础(十二)函数
  • 【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3
  • Screens 4 for mac VNC客户端 强大的远程控制工具
  • 搜索与图论(三)
  • 阿里云“通义千问”开源,可免费商用
  • 23.7.31 牛客暑期多校5部分题解
  • Python爬虫的学习day02 requests 模块post 函数, lmxl 模块的 etree 模块
  • 客户流失分析预测案例 -- 机器学习项目基础篇(7)
  • uniapp中我使用uni.navigateTo跳转webview页面传参,但是接收的参数只有一半。
  • 使用kaminari,在列表页实现分页功能
  • Android 性能调优之bitmap的优化
  • HOT74-数组中的第K个最大元素
  • 类与对象【中】
  • uni-app:实现列表单选功能
  • vue中axios二次封装并发起网络请求配置
  • 开源全文搜索引擎汇总