对于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方法* 完成局部私有累加计数*/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域实现了不同用户之间数据的共享。
好了,这次的学习分享大概就这么多,希望能够对大家有帮助,学习之路诸君共勉,我们下次见。
标签:
相关文章
-
无相关信息