sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 226万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

获取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
posted on   sunny123456  阅读(251)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示