JSP页面默认使用session,因此,在JSP指令中都会有这样一句<%@ page session="true"%>,由于JSP默认使用session,因此,这句指令并不需要显示的进行调用。但是,如果因为性能原因需要关闭session,就需要显式地给出<%@ page session="true" %>。

在JSP页面中使用session很简单,如果使用脚本元素的话,只需要在页面中使用<%session.setAttribute("name", Object);%>,然后在代码中给出这个name对象的表现代码即可。但是,由于JSP最佳实践告诉我们,尽量不要在JSP页面中使用脚本元素,所以,更好的解决方法是把session的调用移植到一个Servlet中。

在Servlet中使用session,最主要的问题是如何获得页面中的session对象。由于页面中的隐式对象session是由HttpSession对象获得的,因此,在Servlet中使用
HttpSession session = request.getSession(true);代码,即可获得这个session对象。然后即可以利用相似的语句session.setAttribute("name", Object);进行操作。

另外的问题是,在哪里获得这个session。由于session中保存的信息应当是用户在整个访问时间内都需要保留的,所以,HttpSession session = request.getSession(true);不能够在一个方法体内。因为如果把这行代码放在方法体内,这个对象就会重复创建,每次都会是一个新创建的对象,保存不住任何的信息。因此,HttpSession session应该成为这个Servlet的成员变量,而不是局部变量。但是在成员变量范围中,request对象并不存在,所以,我们需要使用以下的代码:
********************
import javax.servlet.http.HttpSession;

……

public class ShopcartController extends HttpServlet {
    HttpSession session = null;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ……
            if (session == null) {
                session = request.getSession(true);
            }
            ……
    }
}
********************