正文:
spring获取request和response对象,从网上看到的大致有3种,其实应该算是两种。其中一种测试出错,所以也就只剩下一种了。
第一种:
传入参数
例如:
@RequestMapping("/test")
@ResponseBody
public void saveTest(HttpServletRequest req,HttpServletResponse resp){
}
这样的话如果需要在每一个方法中都添加,太麻烦了。
第二种:
加入监听器,然后再controller里面获取
(1)web.xml相应位置插入
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
(2)
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); HttpServletResponse resp = ((ServletWebRequest)RequestContextHolder.getRequestAttributes()).getResponse();
这种我试了会报类型转换错误,获取到的response为null,获取是哪里写错了
第三种(其实和第一种相同):
注解(现在用的)
在BaseController (它是所有controller的超类) 中加入:
package com.tqmall.nio.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by 刘一波 on 15/9/25.
* E-Mail:yibo.liu@tqmall.com
*/
public class BaseController {
@Autowired
protected HttpServletRequest request;
protected HttpServletResponse response;
@ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
this.request = request;
this.response = response;
}
}
@ModelAttribute 解释:
- 有此注解的方法会在每一个请求前执行,也就是controller执行你请求的方法之前
- 有此注解的参数,会从前端提交的表单中获取数据(现在一般不使用,因为不使用也可以获取到)
- 有此注解的方法的返回值,可以直接在spring的view中使用(也可以在BaseContoller中添加方法,传入参数 Model model,spring会自动注入model参数,给这个model添加值,也可在view中使用)
仅获取request快捷方法
//@Resourse 或者 @Autowired 一样的
@Resource
protected HttpServletRequest request;
@ModelAttribute可以参考:
spring学习之@ModelAttribute运用详解
springMVC @ModelAttribute学习