session的作用域
session的作用域是全局的。也就是在系统运行后,你的程序运行到session的代码时,它就一直存在。我们以一个登录为例子
一、登录接口
@RequestMapping("/login")
public String getUserByAccount(@RequestParam(required=false,value = "account" ) String account,
@RequestParam(required=false,value ="password") String password,
Model model,
HttpSession session,
HttpServletRequest request) {
User user = userService.getUserByAccount(account, password);
List<Book> list = bookService.getAllBook();
request.setAttribute("list", list);
System.out.println(list.toString());
if (user != null) {
session.setAttribute("user", user);
return "/index";
}else {
model.addAttribute("msg","账号密码错误");
return "login";
}
}
当我们从前端页面接收到账号、密码后,去数据库查询用户,得到一个user对象。之后把查询结果用session.setAttribute(“user”,user);放在session里。
之后,在前端页面只要 “${user.×××}”就可以获取user对象的属性进行显示。
当你的前端页面传回其它数据需要用到这一个用户时,也可以在后端代码使用session.getAttribute(“user”);获取到你登录时的user的所有属性。下面的代码是以一个用户把一本书加入书架时,要接收前端页面中 书的id,还要哪个用户的书架。这时,我们就需要user的id。
二、书籍加入书架接口
//在书籍详情页点击加入书架
@RequestMapping("/addbookuser")
public String getshelfBooklist(@RequestParam(required=false,value = "bookId" ) Integer bookId,
Model model,
HttpSession session) {
BookShelf bookShelf = new BookShelf();
bookShelf.setBookId(bookId);
//得到session中user的所有属性
User user = (User)session.getAttribute("user");
//单独把user的id取过来set给书架里的userID
bookShelf.setUserId(user.getId());
//上面取到bookID和userID,然后就可以调用加入书架的方法
bookShelfService.addBookShelf(bookShelf);
return "success";
}