我试图了解如何将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作为参数传递?这届会议是否有效?
答案 0 :(得分:1)
假设您正在使用Spring 3+ @Controller
和@RequestMapping
处理程序方法,Spring为您的处理程序定义了一组默认的supported argument types
- 会话对象(Servlet API):类型为
HttpSession
。一个论点 此类型强制存在相应的会话。作为一个 结果,这样的论证永远不会null
。
Spring使用策略模式来完成此任务,使用接口HandlerMethodArgumentResolver
。它检查处理程序方法的参数类型,并为每种类型尝试查找能够为其解析参数的HandlerMethodArgumentResolver
。
对于HttpSession
,该实施是ServletRequestMethodArgumentResolver
。