接上文,我们已经实现了接受Requests以及转发/重定向。「登录」功能基本完成得差不多了,根据以往学习JSP的经历,接下来该处理Session和cookie了,于是我网上查询了一下,主要和几个关键词有关,下面一一介绍

HttpServletRequest

@GetMapping("/s1")
public void getSession1(HttpServletRequest request) {
    request.getSession().setAttribute("a", 1.0);
}

HttpSession

//设置
@GetMapping("/s2")
public void getSession(HttpSession session) {
    session.setAttribute("a", 2.0);
}

//获取
@GetMapping("/see")
public Double show(HttpSession session) {
    return (Double) session.getAttribute("a");
}

//删除
@RequestMapping("/clean")
public void getSs(HttpSession session) {
    session.removeAttribute("a");
}

@SessionAttributes

这里有两个点,一个是@SessionAttributes(value = “a”),一个是ModelAndView。

前者是专门用来设置session的,后者是存放数据和页面的。

ModelAndView常用两种方法,一个是ModelAndView(“a”),一个是ModelAndView(“a”,“key”,value)。

其中,‘a’为要跳转的页面的模板,后面两个为数据键值对。

@SessionAttributes(value = "a")
public class LoginSession {
    @RequestMapping("/s3")
    public ModelAndView getSession3(HttpSession session) {
        session.setAttribute("a", 3.0);
        return new ModelAndView("s");
    }

    @RequestMapping("/s4")
    public ModelAndView getSession4() {
        double x = Math.random();
        return new ModelAndView("s", "a", 4.0);
    }

    @RequestMapping("/cc")
    public ModelAndView getClean(SessionStatus sessionStatus){
        //删除
        sessionStatus.setComplete();
        return new ModelAndView("s");
    }
}

注意

一个类里面不要同时出现@SessionAttributes和HttpSession,否则会干扰Session消除的。

有@SessionAttributes存在,session.removeAttribute()无法使用,必须使用 sessionStatus.setComplete()。

所以两者尽量不要放在一起。

因为我是自学的,可能不是弄得很清楚,所以我觉得最好还是使用Session,等我以后更厉害我会更新的.