1.最简单方式:处理方法入参

例如:

@RequestMapping("/test")
@ResponseBody
public void saveTest(HttpServletRequest request, HttpServletResponse response){
  
}

2.加入监听器,然后在代码里面获取

在Spring API中提供了一个非常便捷的工具类RequestContextHolder,能够在Controller中获取request对象和response对象,使用方法如下

HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletResponse resp = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();

需要注意的是如果直接使用这个工具类,则会抛出一个空指针异常。原因是需要先在web.xml配置RequestContextListener监听器:

<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>

原理

RequestContextListener实现了ServletRequestListener ,在其覆盖的requestInitialized(ServletRequestEvent requestEvent)方法中,将request最终设置到了RequestContextHolder中.

public class RequestContextListener implements ServletRequestListener {

    private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =
RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES"; @Override
public void requestInitialized(ServletRequestEvent requestEvent) {
if (!(requestEvent.getServletRequest() instanceof HttpServletRequest)) {
throw new IllegalArgumentException(
"Request is not an HttpServletRequest: " + requestEvent.getServletRequest());
}
HttpServletRequest request = (HttpServletRequest) requestEvent.getServletRequest();//从事件对象中获取request对象
ServletRequestAttributes attributes = new ServletRequestAttributes(request);//将request设置到servletRequestAttributes中
request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);//反过来将servletRequestAttributes设置到request中
LocaleContextHolder.setLocale(request.getLocale());
RequestContextHolder.setRequestAttributes(attributes);//再将servletRequestAttributes设置到requestContextHolder中
}

最新文章

  1. 快速Android开发系列网络篇之Android-Async-Http
  2. android中如何用代码来关闭打开的相机
  3. python-实现生产者消费者模型
  4. as3自定义事件
  5. angularjs学习总结 详细教程(转载)
  6. Linq to sql 语法方法示例
  7. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
  8. IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中
  9. miniui datagrid 保存到服务端,使用.NET 自带 JSON 转换时发现日期格式不兼容。
  10. 解决Cygwin中vim的backspace不能正常使用(转)
  11. jQuery动态添加的元素中处理字符串溢出后在指定字符数后添加省略号
  12. Remoting 的&ldquo;传递的引用&rdquo;理解
  13. Linux第三节
  14. Nginx IP地址透传
  15. kvm 虚拟机XML文件
  16. 01-简单编写http服务器
  17. HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
  18. 使用FileReader对象的readAsDataURL方法来读取图像文件
  19. CSS 布局:40个教程、技巧、例子和最佳实践
  20. arugsJS 入门

热门文章

  1. Maven_pom文件常用
  2. Codeforces Round #286 (Div. 1) D. Mr. Kitayuta&#39;s Colorful Graph
  3. HDU 6031 Innumerable Ancestors
  4. JSP内置对象——request对象
  5. python笔记六:进程与线程
  6. iOS 9音频应用播放音频之ios9音频基本功能
  7. 创建基于主-从视图的应用程序(Master-Detail Application)
  8. hdu 2433 Travel(还不会)
  9. python __str__ , __repr__区别
  10. HDU 6166 Spfa