Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring3MVC从控制器访问HttpRequest_Spring Mvc_Httprequest_Httpsession_Request Mapping - Fatal编程技术网

Spring mvc Spring3MVC从控制器访问HttpRequest

Spring 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="

我希望自己处理请求和会话属性,而不是将其留给spring
@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"; 
}