学习目标(常用九大内置对象)
什么是会话?
- 一次会话就是浏览器和服务器之间的一次通话
为什么使用会话?
-
以app1.jsp为例
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% //获取sessionid out.print(session.getId()); %> </body> </html>
可以发现两者返回的sessionid不同,这就可以看做是两个用户同时在访问服务器,如果说没有sessionid,服务器被访问两次就无法区分是两个人访问的,还是一个人访问了两次。
1、session作用及原理
-
session对象的原理在于,服务器可以为客户端创建并维护一个session对象,用于存放数据。
-
在创建session对象的同时,服务器将会为该session对象产生一个唯一编号sessionID 。
-
服务器以cookie的方式将sessionID存放在客户端。
-
当浏览器(即同一个用户)再次访问该服务器时,会将sessionID作为Cookie信息带到服务器,服务器可以通过该sessionID检索到以前的session对象,并对其进行访问。
注意:
cookie中仅仅保存了一个sessionID,而相对较多的会话数据保存在服务器端对应的session对象中,由服务器来统一维护,这样一定程度保证了会话数据安全性,但增加了服务器端的内存开销。 -
URL重写技术跟踪session
如果用户关闭了cookie的使用,还想保存session状态的话,必须使用url重写的技术。也就是在url地址中加入sessionid,以方便保存信息。
所谓url重写就是当客户从一个页面重新连接到另一个页面时,通过向这个新的url
添加参数,把sessionid传过去,这样能够保证session对象是完全相同的。可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现url重写。encodeURL()是当前应用级别的;
encodeRedirectURL()是跨应用的。#使用尽在当前JSP页面中 response.encodeURL(“XXX.jsp "); #可以实现页面跳转url附带参数信息 response.sendRedirect(response.encodeRedirectURL(“XXX.jsp?sessionid=" + “asdasda”));
-
session对象的有效期
出现如下四种情况之一,session将会失效。
1.用户关闭当前正在使用的浏览器
2.关闭网页服务器
3.用户未向服务器提出请求,超过系统预设的时间
4.运行程序结束 session注意:当浏览器关闭时,不会向服务器发送消息,此次会话关联的所有会话数据并不会马上被删除,直到该会话超时才会被删除。当用户再次打开浏览器时,服务器无法将新请求与以前的会话关联起来,因此会创建一个新的会话。
2、session对象的常用方法
-
测试app1.jsp
<%@ page import="java.text.SimpleDateFormat" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //获取sessionid out.print("sessionid:" + session.getId()); out.print("<br>sesison创建时间:" + sf.format(session.getCreationTime())); out.print("<br>sesison最近一次请求时间:" + sf.format(session.getLastAccessedTime())); out.print("<br>session对象的生存时间:" + session.getMaxInactiveInterval()); %> </body> </html>
特别注意:
每次刷新过后,session有效期会从刷新出的新时间开始计时,直到达到再次达到半小时,session才会失效。 -
在Java中设置session有效时长
<%
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取sessionid
out.print("sessionid:" + session.getId());
out.print("<br>sesison创建时间:" + sf.format(session.getCreationTime()));
out.print("<br>sesison最近一次请求时间:" + sf.format(session.getLastAccessedTime()));
//设置session有效时长
session.setMaxInactiveInterval(10);
out.print("<br>session对象的生存时间:" + session.getMaxInactiveInterval());
%>
3、session对象的示例
3.1、session只在当前会话中有效
-
app1.jsp
<%@ page import="java.text.SimpleDateFormat" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% session.setAttribute("flag","^_^"); %> </body> </html>
-
app2.jsp
<%@ page import="java.text.SimpleDateFormat" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% out.print(session.getAttribute("flag")); %> </body> </html>
4、application对象的作用
- application对象实现了用户间信息的共享,可存放全局变量。
- application对象主要用于维护全局信息。
5、application对象的常用方法
- 获取服务器存储地址和版本号信息
<% out.print("服务器路径:" + application.getRealPath("/")); out.print("<br>服务器的版本信息:" + application.getServerInfo()); %>
6、application对象的方法示例
- application作用域很广,在当前服务器运行时有效。
- app1.jsp
<%@ page import="java.text.SimpleDateFormat" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% application.setAttribute("flag","^_^"); %> </body> </html>
- app2.jsp
<%@ page import="java.text.SimpleDateFormat" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% out.print(application.getAttribute("flag")); %> </body> </html>
6.1、统计网页访问次数的实现
- app1.jsp
<%@ page import="java.text.SimpleDateFormat" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>app1.jsp</title> </head> <body> <% //记录访问次数 Integer count = (Integer)application.getAttribute("count"); if(count != null){ //每访问一次count就增加1 count = count + 1; }else{ //如果初始登录默认设置为1 count = 1; } application.setAttribute("count",count); %> <% Integer i = (Integer)application.getAttribute("count"); out.println("您好,您是第 " + i +" 位访问本网站的用户" ); %> </body> </html>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189476.html