@Spring MVC 中几种获取request和response的方式
2024-09-24 21:45:06
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中
}
最新文章
- 快速Android开发系列网络篇之Android-Async-Http
- android中如何用代码来关闭打开的相机
- python-实现生产者消费者模型
- as3自定义事件
- angularjs学习总结 详细教程(转载)
- Linq to sql 语法方法示例
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
- IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中
- miniui datagrid 保存到服务端,使用.NET 自带 JSON 转换时发现日期格式不兼容。
- 解决Cygwin中vim的backspace不能正常使用(转)
- jQuery动态添加的元素中处理字符串溢出后在指定字符数后添加省略号
- Remoting 的&ldquo;传递的引用&rdquo;理解
- Linux第三节
- Nginx IP地址透传
- kvm 虚拟机XML文件
- 01-简单编写http服务器
- HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
- 使用FileReader对象的readAsDataURL方法来读取图像文件
- CSS 布局:40个教程、技巧、例子和最佳实践
- arugsJS 入门
热门文章
- Maven_pom文件常用
- Codeforces Round #286 (Div. 1) D. Mr. Kitayuta&#39;s Colorful Graph
- HDU 6031 Innumerable Ancestors
- JSP内置对象——request对象
- python笔记六:进程与线程
- iOS 9音频应用播放音频之ios9音频基本功能
- 创建基于主-从视图的应用程序(Master-Detail Application)
- hdu 2433 Travel(还不会)
- python __str__ , __repr__区别
- HDU 6166 Spfa