素材巴巴 > 程序开发 >

对于session域和application域的学习

程序开发 2023-09-04 09:58:18

目录

一、什么是session域和application域?

二、session域和application域的不同之处

三、session域和application域的基础语法

四、简析一个session域和application域的代码样例


一、什么是session域和application域?

        session是一个会话变量,从一个浏览器的启动到浏览器的关闭它都存在,在同一个浏览器窗口,无论向服务器发送多少请求,都只会存在一个session对象。

        application类似于系统的全局变量,在一个服务器启动的时候自动创建,在服务器停止时销毁。

二、session域和application域的不同之处

        对于session域,这个会话变量只有当前用户可访问,比如在当前浏览器发生了这个会话,那么所产生的数据在另一个浏览器是无法访问的。

        对于application域来说,它类似于全局变量,在当前浏览器窗口发生的会话所产的数据,在另一个浏览器的相同窗口依然可以共享。

        换种方法来形容的话就是,不同用户之间的数据在application域中可以共享,当前用户修改了一个值,那么另外一个用户看到的就是修改了以后的值,而不是修改前的值,如果是session域,那么看到的就是修改之前的值。

三、session域和application域的方法

        1.创建一个session对象

HttpSession session = request.getSession();

        2.获得session中指定属性的值

String o = (String) session.getAttribute("count");//获得session中属性名为count的值
 

        3.设置session中指定属性的值

session.setAttribute("count", result);//将session中属性名为count的值设置为result

         4.删除session中指定的属性和属性值

session.removeAttribute("count");

        5.声明application中的上下文

ServletContext sc;

         application中对于属性的操作之类的,将session.xxx换成定义的上下文sc.xxx即可

四、简析一个session域和application域的代码样例

        下面给大家简单剖析一个样例,下面先给出代码

session域:

package servlet;import javax.servlet.*;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.*;
 import java.io.*;@WebServlet("/PrivateSum")
 public class PrivateSum extends HttpServlet {/*** 初始化*/public void init() {}/*** doGet方法* 
  • 完成局部私有累加计数*/public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int count;// 设置输出类型和编码格式response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();// 通过表单中的控件名称获得控件的value值String str = request.getParameter("number");// 将字符串转为整型数据int num = Integer.parseInt(str);// 创建session对象HttpSession session = request.getSession();// 返回由count指定的会话属性String o = (String) session.getAttribute("count");if (o != null) {count = Integer.parseInt(o);} else {count = 0;}// 累加,但在同一个session中会一直累加count += num;String result = String.valueOf(count);session.setAttribute("count", result);out.println("现在的累加结果是" + count);}/*** 销毁方法*/public void destroy() {} }
  • application域:

    package servlet;import javax.servlet.*;
     import javax.servlet.annotation.WebServlet;
     import javax.servlet.http.*;
     import java.io.*;/*** @author fhzheng* 
  • 全局计数器,即置于容器中的共享数据*/ @WebServlet("/PublicSum") public class PublicSum extends HttpServlet {//声明上下文对象ServletContext sc;public void init(){//实例化上下文对象sc=this.getServletContext(); }public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{int count; //计数器response.setContentType("text/html;charset=utf-8");PrintWriter out=response.getWriter();//通过表单中的控件名称获得控件的value值String str=request.getParameter("number"); int num=Integer.parseInt(str); //字符串型转变为整型//返回Servlet上下文中count的对象,如没有count的对象,则返回nullString o=(String)sc.getAttribute("count");if( o != null ) { //如果在当前服务器中,曾调用过该应用程序,则有count的对象。count=Integer.parseInt(o);} else {count=0;}// 累加,同一个服务一旦户动,会一直累加count += num;String result = String.valueOf(count); //整型转变为字符串型 sc.setAttribute("count",result); //把result对象的值赋给count对象,即count的值为result的值out.println("现在的累加结果是"+count);}public void destroy(){} }
  • 这里的用的浏览器窗口的链接地址http://localhost:9027/z2020052030_03_servletAttributeVisibility/privateShow/index.html

    我们可以看到这样的界面 

    输入数据以后,我们通过请求对象返回值可以得到我们输入的数据,也就是此行代码

    随后,我们定义一个session对话,然后调用方法得到session中"count"属性的值,也就是这一行代码

    然后我们就开始更新count属性的值,将我们输入的数据累加到count上面

    在同一个会话中,count的值会一直累加,直到浏览器关闭。 

    随后要做的便是更新session中"count"属性的值,再将更新以后的值打印到浏览器页面

     

    浏览器页面显示就会是这样的

     

     

     

     

     以上便是session域的样例剖析,那么下面就是application域的样例剖析,两者其实大同小异。

    我们通过此网址进入application域的页面

    http://localhost:9027/z2020052030_03_servletAttributeVisibility/publicShow/

    看链接我们就可以直到,这里进入的是publicShow的网页,也就是application域的页面,上面的链接进入的是privateShow的网页,也就是session域的页面。

    代码不多解释了,就是把session.xxx换成我们定义的上下文说明sc.xxx,这里就展示一下网页。

    这里是在谷歌页面打开的

     

     

    这里是在Microsoft edge浏览器的页面

     

     

     可以看到,我们在application域实现了不同用户之间数据的共享。

    好了,这次的学习分享大概就这么多,希望能够对大家有帮助,学习之路诸君共勉,我们下次见。

     

     


    标签:

    素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。