学习java会话管理的最佳方法是什么

学习java会话管理的最佳方法是什么,java,session,Java,Session,大家好,请告诉我学习会话管理的最佳方法是什么也许您会发现这个和这个很有帮助 编辑 根据上面Brian Russel的文章: 会话跟踪是在网站访问者从一页移动到另一页时维护其信息或状态的过程。它需要Web开发人员做一些工作,因为它没有内置的机制。从浏览器到Web服务器的连接通过无状态超文本传输协议(HTTP)进行 有许多方法可以处理会话跟踪,但我们的重点是JavaServlet规范提供的易于使用但功能强大的HttpSession接口。在我们进入HttpSession接口之前,让我们看看其他一些维护

大家好,请告诉我学习会话管理的最佳方法是什么

也许您会发现这个和这个很有帮助

编辑

根据上面Brian Russel的文章:

会话跟踪是在网站访问者从一页移动到另一页时维护其信息或状态的过程。它需要Web开发人员做一些工作,因为它没有内置的机制。从浏览器到Web服务器的连接通过无状态超文本传输协议(HTTP)进行

有许多方法可以处理会话跟踪,但我们的重点是JavaServlet规范提供的易于使用但功能强大的HttpSession接口。在我们进入HttpSession接口之前,让我们看看其他一些维护状态的方法

会话跟踪技术
Web开发人员曾经使用Web站点访问者的IP地址来跟踪会话。这种方法缺乏灵活性,存在许多缺陷。主要问题是代理服务器消除了对单个IP地址的使用。用户不再具有唯一的地址,因此此技术无法正常工作。处理会话跟踪的另一种方法是使用HTML隐藏字段:

<INPUT TYPE="hidden" NAME="user"VALUE="Jennifer">
这段代码创建了一个名为“user”和值为“Jennifer”的cookie。cookie的过期日期通过setMaxAge()方法设置为从浏览器接收cookie时起3600秒。以下代码演示如何检索特定cookie的值:

String user = "";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
   if (cookies[i].getName().equals("user")) user = cookies[i].getValue();
   }
}
使用URL重写,代码将是:

<A HREF="http://www.yourservername.com/products/
product.jsp;$sessionid$xxxx">Product Listing</A>
response.sendRedirect(response.encodeRedirectURL("http://www.yourservername.com/products/sale.jsp"));
应用服务器处理encodeRedirectURL()方法与encodeURL()方法稍有不同;但是,每种方法都会产生相同的结果

现在,您应该已经很好地了解了会话ID是如何被跟踪并与服务器上的会话对象相匹配的。使用会话对象的第一步是创建它。方法getSession()用于创建新的会话对象并检索已存在的会话对象。向getSession()方法传递一个布尔标志true或false。false参数表示要检索已存在的会话对象。true参数使会话管理器知道,如果会话对象不存在,则需要创建会话对象。以下代码行演示了getSession()的使用:

getSession()方法将返回会话对象。如果会话对象不存在,则会创建一个新的会话对象。服务器使用会话ID查找会话对象。如果在cookie或URL中找不到会话ID,则会创建一个新的会话对象。您可能只会在Web应用程序中的某个点使用带有true参数的getSession()方法。这可能是访问者成功登录后站点的起点。应用程序中的其他servlet应该使用getSession(false)方法。这将返回当前会话对象或null。如果尚未生成新会话,则不会生成新会话

JavaServlet规范中定义了许多方法。(可以在上找到完整的API。)您最常使用的方法以及我们将重点关注的方法有:

setAttribute(字符串名称,对象值):使用指定的名称将对象绑定到此会话。不返回任何内容(void)。 getAttribute(字符串名称):返回在此会话中使用指定名称绑定的对象,如果在此名称下未绑定任何对象,则返回null。 removeAttribute(字符串名称):从此会话中删除与指定名称绑定的对象。不返回任何内容(void)。 invalidate():使此会话无效并解除绑定到它的所有对象的绑定。不返回任何内容(void)。 isNew():如果客户端尚不知道该会话,或者如果客户端选择不加入该会话,则返回值为true的布尔值

例如,在使用会话时,我们将查看会话管理代码,该代码可用于允许客户查看其帐户信息的在线银行应用程序。应用程序的设计将遵循模型-视图-控制器(MVC)体系结构。模型或数据和业务逻辑将由JavaBeans表示;视图将通过JavaServer页面显示;应用程序的控制将由servlet处理。这些示例中的思想可以很容易地在其他类型的Web应用程序中实现

网上银行应用程序应该有一个HTML登录页面,客户可以在其中以表单形式输入登录名和密码。表单将向登录servlet提交(或发布)名称和密码。servlet需要做的第一件事是验证用户名和密码。为了坚持手头的主题(会话),我们只看处理会话所需的代码。验证客户后,可以创建客户JavaBean。Customerbean将包含关于这个访问者的基本信息,并将存储在会话中。我们希望创建一个新的会话对象,但我们也希望使可能已经存在的会话无效。为此,我们需要检索现有对象(或创建一个新对象),并使用isNew()方法检查它是否是新会话。如果它不是新的会话对象,则需要使用invalidate()方法使其无效。在servlet中,我们可以通过以下代码实现这一点:

HttpSession session = request.getSession (true);
if (session.isNew() == false) {
  session.invalidate();
  session = request.getSession(true);
}
第一行代码生成一个新的会话对象,或检索一个现有的会话对象。第二行通过检查isNew()中的值来查看会话是否是新的。一个true告诉您会话刚刚创建;false表示该用户已经有一个会话,您需要使其无效。用户使用旧会话的一个可能原因是,他或她有两个帐户,登录其中一个帐户,然后尝试登录另一个帐户

现在可以将客户JavaBean添加到会话中以供将来使用。放置物体的过程
<A HREF="<%= response.encodeURL("/products/product.jsp")
%>">Product Listing</A>
<A HREF="http://www.yourservername.com/products/
product.jsp;$sessionid$xxxx">Product Listing</A>
response.sendRedirect("http://www.yourservername.com/products/sale.jsp");
response.sendRedirect(response.encodeRedirectURL("http://www.yourservername.com/products/sale.jsp"));
HttpSession session = request.getSession(true);
HttpSession session = request.getSession (true);
if (session.isNew() == false) {
  session.invalidate();
  session = request.getSession(true);
}
session.setAttribute("CustomerBean", Customer);
Customer customerBean = (Customer)
session.getAttribute('CustomerBean');
if (customerBean == null) {
    response.sendRedirect
    ("https://www.yourservername.com/login.htm");
    return;
}
session.setAttribute("text","A line of text.");
session.setAttribute("number", new Integer(10750));
String myText = (String) session.getAttribute("text");
int myNumber = ((Integer) session.getAttribute('number')).intValue();