HttpSession作为控制器中的参数

时间:2015-06-05 15:48:36

标签: java spring-mvc httpsession

我试图了解如何将HttpSession作为参数发送到弹簧控制器中。 我有一个jsp,它在点击提交按钮时发出了一个帖子请求。在控制器中,按如下方式阅读会话

在控制器中:

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

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

但是,当我将控制器更改为以下内容时,我仍然可以访问会话

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

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

1 个答案:

答案 0 :(得分:1)

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

  
      
  • 会话对象(Servlet API):类型为HttpSession。一个论点   此类型强制存在相应的会话。作为一个   结果,这样的论证永远不会null
  •   

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

对于HttpSession,该实施是ServletRequestMethodArgumentResolver