HttpSession 作为控制器中的参数

HttpSession as a parameter in the controller

我想了解如何在 spring 控制器中将 HttpSession 作为参数发送。 我有一个 jsp,它在单击提交按钮时执行 post 请求。在控制器中,读取会话如下

在控制器中:

public ModelAndView viewEditFundClass(HttpServletRequest request,HttpServletResponse response,Model model){
HttpSession session = (HttpSession)request.getSession();

java.util.Date startDate = sesseion.getAttribute("startDate");

但是,当我把controller改成下面这样的时候,还是可以访问session

 public ModelAndView viewEditFundClass(HttpServletRequest request,HttpServletResponse response, HttpSession session,Model model)

我想知道 Spring 中是如何完成的,即 post 请求是如何将 HttpSession 作为参数传递的?此会话是否有效?

假设您正在使用 Spring 3+ @Controller@RequestMapping 处理程序方法,Spring 为您的处理程序定义了一组默认的 supported argument types

  • Session object (Servlet API): of type HttpSession. An argument of this type enforces the presence of a corresponding session. As a consequence, such an argument is never null.

Spring 使用策略模式来完成此操作,使用接口 HandlerMethodArgumentResolver。它检查您的处理程序方法的参数类型,并尝试为每种类型找到一个 HandlerMethodArgumentResolver 能够为其解析参数。

对于 HttpSession,该实现是 ServletRequestMethodArgumentResolver