对于session域和application域的学习

目录

一、什么是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方法
	 * <li> 完成局部私有累加计数
	 */
	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
 * <li> 全局计数器,即置于容器中的共享数据
 */
@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的对象,则返回null
		String 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域实现了不同用户之间数据的共享。

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

 

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值