JSP常用内置对象:session、application

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。JSP常用内置对象:session、application,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

学习目标(常用九大内置对象)

  • out
  • request
  • response
  • page
  • session
  • application
  • pageContext
  • config
  • exception
    在这里插入图片描述

什么是会话?

  • 一次会话就是浏览器和服务器之间的一次通话

为什么使用会话?

  • HTTP协议无状态,无连接,并不记录用户每次访问的信息,所以引入了会话sesison。
    在这里插入图片描述

  • 以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对象中,由服务器来统一维护,这样一定程度保证了会话数据安全性,但增加了服务器端的内存开销。

  • 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());
	
	%>

在这里插入图片描述

  • 间隔十秒后再次刷新
    在这里插入图片描述

  • sesison也可以手动设置失效

    session.invalidate();
    

    在这里插入图片描述

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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!