JBo*_*Boy 93 spring-mvc httprequest httpsession request-mapping
我想自己处理请求和会话属性,而不是将其留给spring @SessionAttributes,例如登录cookie处理.
我只是无法弄清楚如何HttpRequest在控制器中访问from,我需要一种方法去上面一层@RequestAttribute并访问它HttpRequest自己.使用Stripes来实现ApplicationContext和调用getAttribute().
此外,传递HttpServletRequestas参数似乎不起作用:
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println(""+request.getSession().getCreationTime());
return "home";
}
Run Code Online (Sandbox Code Playgroud)
上述方法不打印任何内容.
你对此有什么建议吗?
jjm*_*tes 170
如果你只是将它添加到你的控制器方法签名中,Spring MVC会给你HttpRequest:
例如:
/**
* Generate a PDF report...
*/
@RequestMapping(value = "/report/{objectId}", method = RequestMethod.GET)
public @ResponseBody void generateReport(
@PathVariable("objectId") Long objectId,
HttpServletRequest request,
HttpServletResponse response) {
// ...
// Here you can use the request and response objects like:
// response.setContentType("application/pdf");
// response.getOutputStream().write(...);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,只需将HttpServletRequest和HttpServletResponse对象添加到签名中,Spring MVC就会将这些对象传递给您的控制器方法.你也想要这个HttpSession对象.
编辑:似乎HttpServletRequest/Response不适用于Spring 3下的某些人.尝试使用Spring WebRequest/WebResponse对象,如Eduardo Zola所指出的那样.
我强烈建议您查看Spring MVC能够自动神奇地注入到处理程序方法的受支持参数列表.
Dei*_*zan 73
我知道这是一个老问题,但......
您也可以在课堂上使用它:
@Autowired
private HttpServletRequest context;
Run Code Online (Sandbox Code Playgroud)
这将提供HttpServletRequest您在方法上使用的当前实例.
另一种方法是使用RequestContextHolder类似:(自:2.0)
RequestContextHolder Holder 类以线程绑定的 RequestAttributes 对象的形式公开 Web 请求。如果可继承标志设置为 true,则当前线程生成的任何子线程都会继承该请求。
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Run Code Online (Sandbox Code Playgroud)