Spring mvc Spring3MVC从控制器访问HttpRequest
我希望自己处理请求和会话属性,而不是将其留给springSpring mvc Spring3MVC从控制器访问HttpRequest,spring-mvc,httprequest,httpsession,request-mapping,Spring Mvc,Httprequest,Httpsession,Request Mapping,我希望自己处理请求和会话属性,而不是将其留给spring@SessionAttributes,例如登录cookie处理 我只是不知道如何从控制器中访问HttpRequest,我需要一种方法来访问@RequestAttribute上面的一层并访问HttpRequest本身。通过实现ApplicationContext并调用getAttribute(),可以使用中的条带来完成此操作 另外,将HttpServletRequest作为参数传递似乎不起作用: @RequestMapping(value="
@SessionAttributes
,例如登录cookie处理
我只是不知道如何从控制器中访问HttpRequest
,我需要一种方法来访问@RequestAttribute
上面的一层并访问HttpRequest
本身。通过实现ApplicationContext
并调用getAttribute()
,可以使用中的条带来完成此操作
另外,将HttpServletRequest
作为参数传递似乎不起作用:
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println(""+request.getSession().getCreationTime());
return "home";
}
上述方法不打印任何内容
您对此有什么建议吗?如果您只是将它添加到控制器方法签名中,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(...);
}
如您所见,只需将HttpServletRequest
和HttpServletResponse
对象添加到签名中,Spring MVC就可以将这些对象传递给您的控制器方法。您还需要HttpSession
对象
编辑:HttpServletRequest/Response似乎不适用于Spring3下的某些人。正如Eduardo Zola指出的那样,尝试使用Spring WebRequest/WebResponse对象
我强烈建议您看看SpringMVC能够自动神奇地注入到处理程序方法中的方法 我知道这是个老问题,但是 您也可以在课堂上使用:
@Autowired
private HttpServletRequest context;
这将提供
HttpServletRequest
的当前实例,供您在方法中使用。Hi,thx对于提示,我不知道我做错了什么,但这不起作用:它不打印任何内容:@RequestMapping(value=“/”)公共字符串home(HttpServletRequest request){System.out.println(“)+request.getSession().getCreationTime());返回“home”}这应该会触发当前的pof millis量,但它不会,同时用@RequestBody注释该方法不会改变任何内容,有进一步的建议吗?谢谢@jjmontes链接到SpringMVC支持的参数!我对Spring几乎一无所知,但我必须在参数之前添加@Context
注释,以便将它们注入。可能是新的,我不知道,但我想我应该提一下。这样做不会阻止控制器bean成为单例吗?Spring控制器总是单例的。这感觉不对-如果控制器在给定时间处理多个请求怎么办?那么什么是“当前”请求呢?这个问题对您的要求有一些解释:在GWT的RemoteServiceServlet
中有类似getThreadLocalRequest()
的东西会非常有用,即使在高度并发的环境中执行,它也会始终返回正确的请求。
@RequestMapping(value="/") public String home(HttpServletRequest request){
System.out.println("My Attribute :: "+request.getAttribute("YourAttributeName"));
return "home";
}