如何在Spring Controller中获取会话变量?

时间:2013-07-29 18:39:13

标签: spring hibernate servlets

我在Spring上配置了一个Controller,我必须通过它来进行数据库连接以调用DAO操作。

这个连接实际上是在一个会话变量中可用的,由于它不是HttpServlet继承的,因此无法访问Spring Controller。

此Controller访问会话变量的正确方法是什么?我必须实现从HttpServlet继承的方法doGet和doPost,以便操作请求对象吗?可以在课堂上敲响Spring控制吗?

感谢您的回复。

@Controller
public class SpringController {

    @RequestMapping("/create")
    public String form(MyCar myCar) {
                /*That's where I have to retrieve hibernateSession from
                * HttpSession and pass to DAO class do its work.
                */
                MyCarDAO myCarDao = new MyCarDAO(session);
                myCarDao.saveOrUpdate(myCar);
        return "WEB-INF/views/projeto/novo.jsp";
    }
}

3 个答案:

答案 0 :(得分:0)

假设您声明了3个会话属性,但在处理程序方法参数中只使用其中一个,因此:

@SessionAttributes({ "abc", "def", "ghi" })
public class BindingTestController {

    @ModelAttribute("abc")
    public String createABC() {
        return "abc";
    }

    @RequestMapping(method = RequestMethod.GET)
    public void onGet(@ModelAttribute("abc") String something) {
        // do nothing :)
    }

    @RequestMapping(method = RequestMethod.POST)
    public void onPost(@ModelAttribute("abc") String something, BindingResult bindingResult, SessionStatus sessionStatus) {
        sessionStatus.setComplete();
    }

}

如果在谷歌中点击它有很多例子

答案 1 :(得分:0)

您可以在方法中添加HttpSession参数:

@RequestMapping("/create")
public String form(MyCar myCar, HttpSession session) {
   ...
}

Spring会在调用方法时自动添加session参数。

查看RequestMapping的文档以获取可能的参数

答案 2 :(得分:0)

IMO正确的方法应该是将连接存储在会话范围的bean中而不是会话变量中。

使用 @Scope(value =“session”)

(参见http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html