计算机系统应用教程网站

网站首页 > 技术文章 正文

《Servlet》第20节:ServletContext对象的常用方法介绍(一)

btikc 2024-10-10 04:53:16 技术文章 6 ℃ 0 评论

前面我们介绍了HttpServletRequest请求对象中的常用方法,其中提到了一个getServletContext()方法,这个方法是用于获取Servlet上下文对象的,那什么是Servlet上下文对象呢???

假设现在有两个Servlet程序,其中FirstServlet程序中,有一个username数据,在SecondServlet程序中需要使用,那么我们要如何在SecondServlet程序中获取到第一个FirstServlet程序里面的username数据呢???

这个时候,ServletContext上下文对象就出现啦,它就是为了解决在不同Servlet程序之间进行数据访问而出现的,为什么叫Servlet上下文对象???我的理解是:后一个Servlet程序要使用到前一个Servlet程序中的数据,这就好比是一篇文章中,后一个段落中的内容是依赖前一个段落中的内容一样,所以叫做上下文。

1.1、ServletContext对象的本质

PS:ServletContext上下文对象,本质上就是一个全局共享的对象,所有的Servlet程序都可以访问ServletConext上下文,所以这就实现了在不同Servlet程序之间,进行数据通信的功能

1.2、getContextPath()方法

getContextPath()方法作用:获取当前应用程序的项目根路径(应用上下文路径)。案例代码:

package com.gitcode.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @version 1.0.0
 * @Date: 2024/2/10 16:19
 * @Author ZhuYouBin
 * @Description:
 */
public class ContextDemoServlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上下文对象
        ServletContext servletContext = request.getServletContext();
        // 获取根路径
        String contextPath = servletContext.getContextPath();
        System.out.println("项目根路径:" + contextPath);
    }
}

1.3、setAttribute()方法

setAttribute()方法作用:向ServletContext上下文中保存key-value数据,保存的数据全局共享。既然有保存数据,当然也有获取数据的方法:getAttribute();数据不能一直存在,不用的数据可以删除,删除数据的方法:removeAttribute()。案例代码:

package com.gitcode.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @version 1.0.0
 * @Date: 2024/2/10 16:19
 * @Author ZhuYouBin
 * @Description:
 */
public class ContextDemoServlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上下文对象
        ServletContext context = request.getServletContext();
        // 保存数据
        context.setAttribute("username", "Tom-2024");
        
        // 获取数据,你可以在另外一个Servlet类中,调用getAttribute()方法获取数据
        Object username = context.getAttribute("username");
        System.out.println("获取到的数据:" + username);
        
        // 删除数据
        context.removeAttribute("username");
    }
}

运行结果如下所示:

1.4、getInitParameterNames()方法

getInitParameterNames()方法作用:获取所有的全局初始化参数名称,即:<context-param>标签定义的参数。案例代码:

package com.gitcode.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

/**
 * @version 1.0.0
 * @Date: 2024/2/10 16:19
 * @Author ZhuYouBin
 * @Description:
 */
public class ContextDemoServlet03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上下文对象
        ServletContext context = request.getServletContext();
        // 获取所有初始化参数名称
        Enumeration<String> initParameterNames = context.getInitParameterNames();
        while (initParameterNames.hasMoreElements()) {
            System.out.println("初始化参数名称:" + initParameterNames.nextElement());
        }
    }
}

web.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee">

    <display-name>工程名称</display-name>
    <description>
        工程描述
    </description>

    <context-param>
        <param-name>username-global</param-name>
        <param-value>Tom-2024-global</param-value>
    </context-param>
	
    <servlet>
        <servlet-name>ContextDemoServlet03</servlet-name>
        <servlet-class>com.gitcode.servlet.ContextDemoServlet03</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>Tom-2024</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ContextDemoServlet03</servlet-name>
        <url-pattern>/contextDemoServlet03</url-pattern>
    </servlet-mapping>
</web-app>

运行结果如下所示:

注意:ServletConfig对象中也有一个getInitParameterNames()方法,但是ServletConfig中的是获取某个Servlet中的初始化参数,即:<init-param>标签定义的参数名称;而ServletContext上下文对象中,提供的getInitParameterNames()方法是获取<context-param>标签定义的全局初始化参数名称

1.5、getInitParameter()方法

getInitParameter()方法作用:获取指定参数名称的参数值,获取的是<context-param>标签定义的参数值。案例代码:

package com.gitcode.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

/**
 * @version 1.0.0
 * @Date: 2024/2/10 16:19
 * @Author ZhuYouBin
 * @Description:
 */
public class ContextDemoServlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上下文对象
        ServletContext context = request.getServletContext();
        // 获取初始化参数
        Enumeration<String> initParameterNames = context.getInitParameterNames();
        while (initParameterNames.hasMoreElements()) {
            String paramName = initParameterNames.nextElement();
            System.out.println("参数名称:" + paramName + ",参数值:" + context.getInitParameter(paramName));
        }
    }
}

运行结果如下所示:

注意:ServletConfig对象中也有一个getInitParameterNames()方法,但是ServletConfig中的是获取某个Servlet中的初始化参数,即:<init-param>标签定义的参数名称;而ServletContext上下文对象中,提供的getInitParameterNames()方法是获取<context-param>标签定义的全局初始化参数名称

今天就到这里,未完待续~~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表