获取HttpServletRequest、HttpServletResponse的几种方式

发布时间 2023-12-04 12:38:22作者: sunny123456

获取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