博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.3servlet三大作用域
阅读量:3968 次
发布时间:2019-05-24

本文共 3063 字,大约阅读时间需要 10 分钟。

1.概念

js中有四大作用域,在Servlet中,只存在三大作用域.

HttpServletRequest 一次请求

HttpSession 一次会话

ServletContext 当前应用

下面详细介绍这三个作用域。

1、HttpServletRequest作用域:

存入数据的方法request.setAttribute(“User”,user);

此作用域保存的数据只是针对一次请求。使用该对象保存数据,一次请求内数据有效。请求转发是属于一次请求的,所以放在此作用域中的数据,在一个页面转发多个页面数据都是有效的。

作用域创建时间:客户端向服务器发送一次请求时创建。

销毁时间:服务器为这次请求作出响应之后,销毁request.

2、HttpSession作用域:

针对一次会话,使用该对象保存数据,数据保存在服务器上,一次会话(多个请求)内数据有效,如果关闭一次浏

览器,结束这次回话,再次打开的时候session就失效了。

创建时间:服务器第一次调用getSession()方法的时候,服务器创建session对象。

销毁时间:销毁有三种情况

1.服务器非正常关闭(正常关闭时:Session被序列化);

2.Session过期,xml文件配置默认时间是30分钟。

3.手动调用Session的invalidate的方法。

3、SevletContext作用域:

针对一个web应用。一个web应用只有一个SevletContext对象,使用该对象保存的数据在整个web应用中都有效。

创建时间:服务器启动的时候。

销毁时间:服务器关闭的时候或者项目移除的时候。

总结:如果数据保存在request对象中,一般使用请求转发,来获取。因为请求转发是只有一次请求的。但是如果

是重定向,因为重定向是多次请求,所以不能使用request中的数据,可以使用session或context中的。

4、三个作用域通用方法:

存放数据:setAttribute(name,value)

获取数据:getAttribute(name);

删除数据:removeAttribute(name);

2.关于3大作用域使用

三大作用域的使用,其本质是根据作用域的范围,生命周期决定其使用的方式.

当我们的数据只需要在一次请求之间进行传递时,优先HttpServletRequest :例如 : 你的数据需要传递给下一个地址.

当我们的数据,在多次请求时需要实现共享时,优先使用HttpSession.例如: 用户的多个操作,都需要用户ID或者检查是否存在用户信息时.

当我们的数据,在整个应用是全局唯一的,且大家都可以访问,使用时,使用ServletContext.: 例如 : 整个应用的访问人数.虽然用户访问的地址不同,但是整个应用的访问人数都应该增长.此时使用ServletContext.

例如:全局的常量值,也可以使用ServletContext.

3.ServletContext的使用

  1. 获取ServletContext作用域对象.一般用:req.getServletContext();

    //1. 获取ServletContext		ServletContext context1 = req.getServletContext();		System.out.println(context1);		ServletContext context2 = this.getServletContext();		System.out.println(context2);		ServletContext context3 = req.getSession().getServletContext();		System.out.println(context3);		ServletContext context4 = this.getServletConfig().getServletContext();		System.out.println(context4);		//在整个项目,全局只有一个ServletContext对象,所有对象都共有它.
  2. ServletContext的核心方法:

    //1. 获取ServletContext		ServletContext context = req.getServletContext();		//2. ServletContext相关方法		//1. 作用域属性相关方法		//context.setAttribute(name, object); // 设置作用域属性值		//context.getAttribute(name) // 根据属性名 从作用域中获取值		//context.getAttributeNames()// 获取作用域中所有的属性名		//context.removeAttribute(name); // 删除作用域中属性值		//2. 作用域初始化属性值相关方法		//context.getInitParameter(name) // 根据参数名称,获取初始化参数对应的值		//context.getInitParameterNames() // 获取所有初始化参数的name值集合		//获取初始化参数的  name 属性值		Enumeration
    initParameterNames = context.getInitParameterNames(); while(initParameterNames.hasMoreElements()) {
    String name = initParameterNames.nextElement(); System.out.println(name); System.out.println(context.getInitParameter(name)); } //获取服务器资源路径 String contextPath = context.getContextPath();// 获取项目名称 System.out.println(contextPath); String realPath = context.getRealPath("/");// 获取项目的物理路径 System.out.println(realPath); realPath = context.getRealPath("img");// 获取项目中img文件夹的物理路径 只能获取 webContent下面直接文件夹 System.out.println(realPath); realPath = context.getRealPath("child");// 获取项目的物理路径 返回child物理路径错误的 img/child System.out.println(realPath); Set
    resourcePaths = context.getResourcePaths("/"); // 获取webContent文件夹下面文件信息 for (String string : resourcePaths) {
    System.out.println(string); }

转载地址:http://sqyki.baihongyu.com/

你可能感兴趣的文章
V4L2 usb 摄像头 测试
查看>>
摄像头究竟如何选购
查看>>
摄像头究竟如何选购
查看>>
Qt/Linux 下的摄像头捕获(Video4L…
查看>>
Qt/Linux 下的摄像头捕获(Video4L…
查看>>
肤色检测
查看>>
肤色检测
查看>>
CvScalar
查看>>
CvScalar
查看>>
C代码优化方案(1)
查看>>
C代码优化方案(1)
查看>>
C代码优化方案(2)
查看>>
C代码优化方案(2)
查看>>
在帧缓冲上显示jpg格式的图片
查看>>
在帧缓冲上显示jpg格式的图片
查看>>
jpeglib使用指南
查看>>
jpeglib使用指南
查看>>
IJG JPEG 函数库:文件列表
查看>>
undefined reference to `jpeg_std…
查看>>
V4L2摄像头获取单幅图片测试程序
查看>>