目 录CONTENT

文章目录

ServletContext对象

在等晚風吹
2023-12-05 / 0 评论 / 0 点赞 / 12 阅读 / 0 字 / 正在检测是否收录...

ServletContext对象

每一个 web 应用都有且仅有一个ServletContext 对象,又称 Application 对象,从名称中可知,该对象是与应用程序相关的。在 WEB 容器启动的时候,会为每一个 WEB 应用程序创建一个对应的 ServletContext 对象。

​ 该对象有两大作用,第一、作为域对象用来共享数据,此时数据在整个应用程序中共享; 第二、该对象中保存了当前应用程序相关信息。例如可以通过 getServerInfo() 方法获取当前服务器信息 ,getRealPath(String path) 获取资源的真实路径等。

ServletContext对象的获取

​ 获取 ServletContext 对象的途径有很多。比如:

  1. 通过 request 对象获取

    ServletContext servletContext = request.getServletContext();
    
  2. 通过 session 对象获取

    ServletContext servletContext = request.getSession().getServletContext();      
    
  3. 通过 servletConfig 对象获取,在 Servlet 标准中提供了 ServletConfig 方法

    ServletConfig servletConfig = getServletConfig();
    ServletContext servletContext = servletConfig.getServletContext();
    
  4. 直接获取,Servlet 类中提供了直接获取 ServletContext 对象的方法

    ServletContext servletContext = getServletContext();
    

ServletContext的使用

​ ServletContext 也可当做域对象来使用,通过向 ServletContext 中存取数据,可以使得整个应用程序共享某些数据。当然不建议存放过多数据,因为 ServletContext 中的数据一旦存储进去没有手动移除将会一直保存。

package com.msb.testsession;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/tsc01")
public class TestServletContext01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取ServletContext对象
		ServletContext servletContext = request.getServletContext();
		// 获取项目存放的真实路径
		String realPath = servletContext.getRealPath("/");
		// 获取当前服务器的版本信息
		String serverInfo = servletContext.getServerInfo();
		// 设置域对象
		servletContext.setAttribute("name","zhangsan");
    }
}

​ 可以在项目的其它位置取出:(可以关闭服务器,因为不限于会话,是在整个服务器启动期间都好使的,对整个应用都好使。)

package com.msb.testsession;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;


@WebServlet("/tsc02")
public class TestServletContext02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取ServletContext对象
		ServletContext servletContext = request.getServletContext();
		// 获取域对象
		String name = (String) servletContext.getAttribute("name");
		// 移除域对象
		servletContext.removeAttribute("name");
    }
}

Servlet的三大域对象

认识域对象

什么是域对象
域对象类似于之前学习的map集合,可以存放键值对的数据。不同的是域对象中数据的使用有一定的区域范围限制。

三大域对象

​ request域 对应HttpServeltRequest对象 也叫请求域
​ session域 对应HttpSession对象 也叫会话域
​ application域 对应ServletContext对象 也叫应用域
常用API
​ setAttribute(key, value) 向域中添加/修改数据,无则添加,有则修改
​ getAttribute(key) 获取域中的数据
​ removeAttribute(key) 从域中移除指定key的数据

request域

有效范围
在一次请求内有效,比如:转发。一般用于存储单次请求之内的业务数据。
生命周期
创建:浏览器每次请求,服务器都会重新创建
使用:在请求的Servlet中或者请求转发后的Servlet中使用
销毁:请求响应结束后,该请求对象就会被销毁

Session域

有效范围

​ 单次会话内有效,可以跨多个请求。
​ 一般用来存储用户状态数据,比如用户的登录信息。

生命周期

  1. 创建:从第一次发出请求,会话开始
  2. 使用:本次会话内,浏览器和服务器之间发生的多次请求和响应都有效
  3. 销毁:会话结束,比如:达到最大不活动时间、手动清除、浏览器关闭

Application域

有效范围

​ 当前web项目内都有效,可以跨请求,跨会话访问。
​ 一般放一些全局的和项目本身相关的数据,如在线人数,不建议向这里放业务数据。

生命周期

  1. 创建:服务器启动

  2. 使用:服务器运行期间都有效

  3. 销毁:服务器关闭

0

评论区