内置对象之session

服务器应当通过某种方法知道这是同一个用户。Tomcat服务器可以使用内置对象session(会话)记录用户的信息,内置对象session由tomcat服务器负责创建。Session是实现了HttpSession接口类的一个实例,可以再tomcat服务器的某个文件夹查找相关接口的方法。

当用户首次访问web服务目录中的一个jsp页面时,tomcat服务器产生一个session对象,这个session对象调用相应的方法可以存储用户在访问web服务目录中各个页面期间提交的各种信息,比如姓名,号码等信息。这个session对象被分配了一个String类型的id号,tomcat服务器同时将这个id号发送到用户端,存放在用户(浏览器)的Cookie中。这样session对象和用户之间就建立起一一对应额度的关系,即每个用户都对应着一个session对象(称作用户的会话),不同用户(不同浏览器)的session对象互不相同,具有不同的id号码。当用户再次访问该web服务目录,将不会分配给用户新的session对象,而是使用完全相同的一个,直到session对象达到了最大生存时间或用户关闭自己欸大浏览器或tomcat服务器关闭。如果用户的session对象被销毁,当用户再请求访问该web服务目录时,tomcat服务器将为该用户创建一个新的session对象。

Session对象与url重写

Session对象能和用户建立起一一对应关系依赖于用户浏览器是否支持Cookie,如果用户浏览器不支持Cookie,那么用户在不同网页之间的session对象可能是互不相同的,因为tomcat服务器无法将id存放在用户浏览器中,就不能建立session对象和用户的一一对应关系。如果用户不支持Cookie,jsp页面可以通过url重写来实现session对象的唯一性,。所谓url重写,就是当用户从一个页面链接到一个页面时,通过向这个新的url添加参数,把session对象的id带过去,这样就可以保障用户在该web服务目录的各个页面中的session对象是完全相同的。可以让response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写,比如,如果从example4_13_a.jsp页面链接到example4_13_b.jsp页面,首先在程序片实现URL重写,

String str = response.encodeRedirectURL(“example4_13_b.jsp”);

然后将链接目标写成<%= str%>即可。例如,将example4_13_a.jsp的代码:

<form action = “example4_13_b.jsp” method = post>

更改为:

<form action = <% = str%>  method = post >

session对象存储数据

Session对象驻留在服务器端,可以用下列方法处理数据。

  1. public void setAttribute(String key,Object obj).
  2. Public Object getAttribute(String key).
  3. Public Enumeration getAttributeNames()
  4. Public void removeAttribute(String key)

session对象的生存期限

一个用户在某个web服务目录道德session对象的生存期限依赖于session对象是否调用invalidate()方法使得session无效或session对象达到了设置的最长“发呆”状态时间,以及用户是否关闭浏览器或服务器端被关闭。所谓发呆状态时间是指用户对某个web服务目录下的jsp页面发出请求,并得到响应,如果用户不再对该web服务目录发出请求(可能去请求其他的web服务目录),那么用户对该web服务目录进入“发呆”时间,直到用户再次请求该web服务目录时,“发呆”状态结束。

可以修改tomcat服务器下的web.xml,重新设置各个web服务目录下的session对象的最长发呆时间。打开tomcat安装目录conf文件下的配置文件web.xml,找到

<session-config>

<session-timeout>30</session-timeout>

<session-config>

修改里面的30即可,单位为分钟。

Session对象可以使用下面的方法获取或设置和生存时间有关的信息。

  1. public long getCreationTime()获取session创建时间,单位是毫秒。
  2. Public long getLastAccessedTime()获取session最后一次被操作的时间,单位是毫秒

例子代码:

example4_13_a.jsp

--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<style>
    .textStyle{
        font-size: 36px;
        font-family: “宋体”;
        color:blue;
    }
    body {
        background-color: pink;
    }
</style>
<body>
    <p>
        这是example4_13_a.jsp页面<br>单机提交键将链接到example4_13_b.jsp
        <% String id = session.getId();
            out.println("<br>session对象的ID是<br>" + id);
        %>
    </p>
    <form action="example4_13_b.jsp" method = post>
        <input type="submit" class = "textStyle" value = "访问example4_13_b.jsp">
    </form>
</body>
</html>

example4_13_b.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<style>
    .textStyle{
        font-size: 36px;
        font-family: 黑体;
        color: red;
    }
</style>
<body>
    <p class = "textStyle">
        这是example4_13_b.jsp页面
        <% String id = session.getId();
            out.println("<br>session对象的ID是<br>" + id);
        %>
    </p>
    <br>链接到example4_13_a.jsp页面<br>
    <a href="example4_13_a.jsp">example4_13_a.jsp</a>
</body>
</html>


版权声明:本文为Dagonglu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。