首页 > 其他分享 >获取HttpServletRequest、HttpServletResponse的几种方式

获取HttpServletRequest、HttpServletResponse的几种方式

时间:2023-12-04 12:44:19浏览次数:35  
标签:HttpServletRequest String request HttpServletResponse 几种 获取 response 请求

获取HttpServletRequest、HttpServletResponse的几种方式

获取HttpServletRequest、HttpServletResponse的几种方式

1、可以封装为静态方法

ServletRequestAttributes servletRequestAttributes =  (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
HttpServletResponse response = servletRequestAttributes.getResponse();
  • 1
  • 2
  • 3

2、controller的方法里面

@GetMapping(value = "")
public String doSomething(HttpServletRequest request,HttpServletResponse response) {
    //...
}
  • 1
  • 2
  • 3
  • 4

3、直接注入

@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
  • 1
  • 2
  • 3
  • 4

4、request常用API

4.1、request路径相关
// 获取请求方式: GET
String getMethod()

// 获取虚拟目录(上下文目录):虚拟路径通过在application配置当中可以配置
// 配置:server.servlet.context-path=/aaa
String getContextPath()
// 获取Servlet路径:就是获取的controller当中配置的路径
String getServletPath()
/// 获取请求参数: id=3
// http://localhost:8080/aaa/test?id=3
String getQueryString()
// 获取请求URI:/servletDemo/demo1
// 上下文路径+controller当中配置的路径
String getRequestURI()
// 获取完整请求路径:http://localhost:8080/aaa/test
String getRequestURL()
// 获取协议及版本:HTTP/1.1
String getProtocol()
// 获取客户机的IP地址:192.168.0.0
String getRemoteAddr()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
4.2、Header相关
// 获取请求头数据,通过请求头名称获取值
String getHeader(String name)
// 获取所有请求头信息
Enumeration getHeaderNames()
  • 1
  • 2
  • 3
  • 4
4.3、获取请求体
// 获取流对象-获取字符输入流,只能操作字符数据
BufferedReader getReader()
// 获取流对象-获取字节输入流,既能操作字节也能操作字符
ServletInputStream getInputStream()
  • 1
  • 2
  • 3
  • 4
4.4、获取参数
// 获取请求参数通用方式(根据参数名称获取参数值) username=zhangsan
String getParameter(String name)
// 获取请求参数名称获取参数值的数组 hobby=xx&hobby=game
String[] getParameters(String name)
// 获取请求参数名称(与获取请求头方法类似)
Enumeration getParameterNames()
// 获取所有参数的Map集合
Map getParameterMap()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
4.5、中文乱码
中文乱码问题,Tomcat8 已经将GET 请求方式的乱码问题 解决了,但是POST方式的中文乱码问题 依旧存在,需要自行配置
在获取参数之前配置

request.setCharacterEncoding("UTF-8");

  • 1
  • 2
  • 3
  • 4
4.6、转发
浏览器像服务器发起一次请求,服务器内部实现转发,相当于执行了两个资源之间的操作。

// 通过request对象获取请求转发服务器:
RequestDispatcher getRequestDispatcher(String path);
// 使用==RequestDispatcher对象来进行转发
forward(ServlertRequest request,ServletResponse response);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
4.7、共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

// 存储数据
setAttribute(String name,Object obj)
// 通过键来获取值
Object getAttribute(String name);
// 通过键移除键对应的值
removeAttribute(String name)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5、response常用API

//设置状态码
response.setStatus(304);

// 设置指定名称响应头的值,下面是导出的时候我们经常要设置的响应头,响应头当中还有文件的名称,也就是通过流下载文件的时候那个文件名称
response.setHeader("Content-Disposition", "attachment;filename=" + zipName);
// 1.字符输出流
PrintWriter getWriter()
// 2.字节输出流(一般导出就是将文件写到字节流,然后响应response)
ServletOutputStream getOutputStream()
// 注意:在同一个Servlet,二种输出流不能同时使用,产生互斥
// response提供了专门负责重定向的方法
response.sendRedirect("/项目地址/资源地址");
// 指定服务器响应中文的编码方式
response.setCharacterEncoding("GBK");
// 统一服务器和客户端的编码方式
response.setContentType("text/html;charset=utf-8");
// 导出的时候如果需要直接通过response流导出Excel,需要和前端设置上下文类型,如下:
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
原文链接:https://blog.csdn.net/weixin_45285213/article/details/125717926

标签:HttpServletRequest,String,request,HttpServletResponse,几种,获取,response,请求
From: https://www.cnblogs.com/sunny3158/p/17874676.html

相关文章

  • 【PUSDN】centos查看日志文件内容,包含某个关键字的前后5行日志内容,centos查看日志的几
    简述centos查看日志的几种方法centos查看日志文件内容,包含某个关键字的前后5行日志内容前情提示系统:一说部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者备份bash,实际不执行如果无法下载......
  • Web 应用显示 Icon 的几种技术盘点
    在Web前端应用开发中,渲染图标是一个常见的需求,可以通过多种技术来实现。图标在用户界面中扮演着重要的角色,提供直观的视觉反馈和更好的用户体验。以下是一些常见的前端图标渲染技术,以及它们的一些优缺点。**1.字体图标(IconFonts)字体图标是将图标作为字体文件(通常是.ttf或.o......
  • 2024年几种浏览器播放RTSP视频流的方案及优缺点
    现在越来越多的场景需要用到视频设备了,比如:交通部门、停车场、园区等,大部分需要在浏览器中实时播放视频流,因为RTSP协议具有可扩展性、安全性和易解析等特点,成为大部分摄像头厂商的首选协议,众所周知的是RTSP协议的视频流,浏览器中是无法直接使播放,只有通过插件或者转码来实现。市场......
  • 几种数据库忘记密码的处理方法
    几种数据库忘记密码的处理方法MySQL8.0分为rpm方式和tar.gz安装方式不同而不同需要修改/etc/my.conf配置文件.注意如果是rpm包的话就在这个路径下面修改增加内容skip-grant-tables注意修改完需要重启数据库rpm包安装的方式重启方法为:systemctlrestartmysqld......
  • 代理实现的几种方式
    代理实现的几种方式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.静态代理在使用静态代理时,需要定义一个接口或父类,被代理对象和代理对象一起实......
  • clickhuose toStartOfInterval聚合的几种方式
    1.秒、分钟、小时、天以上这种sql可以用于上面几种类型的聚合。请注意时间SELECTtoStartOfInterval(timestamp,INTERVAL1minute)asstart_of_minute,count(*)ascountFROMtable_nameWHERE timestampBETWEEN'2023-10-3011:11:11'and'2023-11-3011:11......
  • 程序开发中常用的10种算法,你用过几种?
    当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1.冒泡排序(BubbleSort):冒泡排序是一种简单的比较排序算法,它多次遍历数组,将较大的元素逐渐浮动到数组的末尾。publicstaticvoidBubbleSort(int[]ar......
  • 模具行业ERP有哪几种?可以帮助企业解决什么难题
         在我们的生活当中可以看到很多种类的模具产品,这些商品有差异化的外观和应用途径,涉及的销售策略、包装、营销渠道、价格策略、品质等方面也存在诸多的差别。而信息和互联网技术的发展与成熟,模具行业的经营方式也朝着数据化和集成化方向发展。进入大数据时代,不少模......
  • django中实现事务的几种方式
    django中实现事务的几种方式https://zhuanlan.zhihu.com/p/622987268具体表现形式为:每次数据库操作(比如调用save()方法)会立即被提交到数据库中。但是如果你希望把连续的SQL操作包裹在一个事务里,就需要手动开启事务根据粒度不同,三种全局:全局,每次请求在一个事务中,粒度太大,事......
  • Django中实现事务的几种方式、事物的回滚和保存点、事务提交后,执行某个回调函数、Djan
    Django中实现事务的几种方式#https://zhuanlan.zhihu.com/p/622987268Django是支持事务操作的,它的默认事务行为是自动提交,具体表现形式为:每次数据库操作(比如调用save()方法)会立即被提交到数据库中。但是如果你希望把连续的SQL操作包裹在一个事务里,就需要手动开启事务#......