Servlet--ServletContext详解

本文详细介绍了ServletContext对象的概念,其作为web应用的环境对象,负责封装整个web应用的信息。文章讲解了ServletContext的生命周期,如何获取该对象,以及它在获取初始化参数、资源路径、存储数据和获取工程名字等方面的作用。
什么是ServletContext对象?

ServletContext代表的是一个web应用的环境(上下文)对象,ServletContext对象内部封装的是该web应用的信息。
一个web应用只有一个ServletContext对象。\color{red}{一个web应用只有一个ServletContext对象。}webServletContext

Servlet的生命周期
  • 创建:该web应用被加载(服务器启动或发布web应用(前提,服务器启动状态))
  • 销毁:web应用被卸载(服务器关闭,移除该web应用)
获得ServletContext对象

第一种:

ServletContext servletContext = config.getServletContext();

第二种(常用):

ServletContext servletContext1 = this.getServletContext();
ServletContext的作用
  1. 获得web应用全局的初始化参数:
    web.xml中配置初始化参数
    <!-- 配置初始化参数 -->
    <context-param>
        <param-name>testStr</param-name>
        <param-value>helloWorld</param-value>
    </context-param>

通过ServletContext获得初始化参数:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //获得初始化参数
        String testStr = servletContext.getInitParameter("testStr");

        System.out.println(testStr);
    }

通过浏览器访问,控制台输出:

helloWorld
  1. 获得web应用中任何资源的绝对路径(重要):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //获的资源相对于该web的相对路径
        String realPath = servletContext.getRealPath("index.jsp");
        System.out.println(realPath);
    }

通过浏览器访问,控制台输出:

F:\IDEAworkspace\JavaEEDemo\out\artifacts\JavaEEDemo_war_exploded\index.jsp
ServletContext是一个域对象

域对象:
域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据。

域对象通用方法:

方法描述
setAttribute(String name,Object value);向域对象中添加数据,添加时以key-value形式添加
getAttribute(String name);根据指定的key读取域对象中的数据
removeAttribure(String name);根据指定的key从域对象中删除数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得ServletContext对象
        ServletContext servletContext = this.getServletContext();
        //向域对象中存入数据
        servletContext.setAttribute("str", "helloWorld");
        //从域对象中取出数据
        String str = (String) servletContext.getAttribute("str");
        //从域对象中删除数据
        servletContext.removeAttribute("str");
        
    }

ServletContext存储数据的特点:
全局共享,里面的数据所有动态资源都可以写入和读取。

ServletContext获取当前工程名字

核心方法:

getServletContext().getContextPath();

示例:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得工程名字
        String contextPath = getServletContext().getContextPath();

        System.out.println(contextPath);

    }

通过浏览器访问,控制台输出:

/JavaEEDemo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值