SSM总结:Session篇
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();
}
}声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
