牛骨文教育服务平台(让学习变的简单)
博文笔记

SSM总结:Session篇

创建时间:2018-01-12 投稿人: 浏览次数:124

web 应用通常会引入 Session,用来在服务端和客户端之间保存一系列动作/消息的状态。

比如:网上购物维护 user 登录信息直到 user 退出。

          在 user 登录后,后面当我们需要user信息时,都需要从 Session 中获取。这其中就会涉及到程序去访问 Session属性的问题。在java中,Servlet 规范提供了 HttpSession对象来满足这种需求。开发人员可以从 HttpServletRquest对象得到 HttpSession,再从HttpSession中得到状态信息。

基于Servlet的标准代码是:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
User user = (User)req.getSession().getAttribute("currentUser");   
}

保存Session:

 HttpSession session = request.getSession();
        session.setAttribute("buyer", buyer);

获取Session:

HttpSession session = request.getSession();
Buyer buyer = (Buyer) session.getAttribute("buyer");
销毁Session:

session.invalidate();
在SSM框架中,Session:面向接口编程,我们可以创建一个Session供应类:写成(接口-实现类)的方式,例如:SessionProvider-HttpSessionProvider

写成接口然后再将SessionProvider托管给Spring,好处:注入Spring,在项目启动时可以直接准备好,速度快。

 @Autowired
    private SessionProvider sessionProvider;

public class HttpSessionProvider implements SessionProvider {
    @Override
    public void setAttribute(HttpServletRequest request, String name, Serializable value) {
        HttpSession session = request.getSession();
        session.setAttribute(name, value);
    }

    @Override
    public Serializable getAttribute(HttpServletRequest request, String name) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            return(Serializable) session.getAttribute(name);
        }
        return null;
    }

    @Override
    public void logout(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.invalidate();
        }
    }

    @Override
    public String getSessionId(HttpServletRequest request) {
        return request.getSession().getId();
    }
}






声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。