服务器应当通过某种方法知道这是同一个用户。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对象驻留在服务器端,可以用下列方法处理数据。
- public void setAttribute(String key,Object obj).
- Public Object getAttribute(String key).
- Public Enumeration getAttributeNames()
- 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对象可以使用下面的方法获取或设置和生存时间有关的信息。
- public long getCreationTime()获取session创建时间,单位是毫秒。
- 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>