在JSP中使用会话session

时间:2018-11-15 12:51:44  来源:igfitidea点击:

本章将学习在JSP中如何使用会话对象session来处理会话。

HTTP协议是无状态的。这意味着客户端(web浏览器)和web服务器之间没有永久连接。
当客户端从web服务器请求页面时,它将打开连接,检索页面并关闭连接。
Web服务器不知道客户端会发生什么。
如果从客户端发出另一个请求,web服务器不会想到将新连接与之前已建立的连接联系到一起。

为了解决HTTP协议的无状态性这个问题,JSP提供了一个隐式会话对象,它就是HTTP session对象。
session对象位于服务器端,因此您可以在session中保存有关客户端和其他数据的任意数据,之在不同的请求中,可以获取保存的数据进行处理。JSP通过单个key把数据存储在服务端的session对象中。

session对象有三个最常用,最重要的方法:

public void setAttribute(String name, Object value)
    throws IllegalStateException
 
public Object getAttribute(String name)
    throws IllegalStateException
 
public void removeAttribute(String name)
    throws IllegalStateException

使用session的示例

让我们看一个如何使用session对象的示例。

在这例中,我们有三个页面:
页面1:从用户收集数据,将表单提交到第二个页面,
页面2:用于在会话中存储数据。
页面3:从会话中获取数据并显示。

page1.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>JSP session页面1</title>
    </head>
    <body>
        <form method="post" action="page2.jsp">
            <table>
                <tr>
                    <td>名字</td>
                    <td><input type="text" name="name" /></td>
                </tr>
                <tr>
                    <td>评论</td>
                    <td><textarea name="comments" cols="30" rows="5"></textarea></td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" value="提交" /></td>
                </tr>
            </table>
        </form>
    </body>
</html>

在上面的表单中,当用户输入信息后,单击提交按钮,数据将发送给页面page2.jsp。

page2.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
          String name = request.getParameter("name");
          String comments = request.getParameter("comments");
          // 保存数据到session中
          session.setAttribute("name", name);
          session.setAttribute("comments", comments);
 
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP session页面2</title>
    </head>
    <body>
        <%-- 重定向到页面 page3.jsp --%>
        <jsp:forward page="page3.jsp" />
    </body>
</html>

在page2.jsp页面中,我们将所有提交的数据保存到session对象中,并将请求转发到另一个名为page3.jsp的页面。

page3.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html>
    <head>
        <title>JSP session页面3</title>
    </head>
    <body>
        <h1>显示session对象中的数据</h1>
        <table>
                <tr>
                    <td>名称</td>
                    <td><%= session.getAttribute("name")%></td>
                </tr>
                <tr>
                    <td>评论</td>
                    <td><%= session.getAttribute("comments")%></td>
                </tr>
            </table>
    </body>
</html>

我们通过sessiongetAttribute()方法来获取并显示在page1.jsp中提交的数据。