浅谈ServletContext

本文详细介绍了ServletContext的概念及作用,包括如何使用ServletContext对象读取web项目中的资源文件、获取全局初始化参数以及实现多个Servlet之间的数据共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.ServletContext概述

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用,服务器开始,其就存在,服务器关闭,其才释放。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,它是一个全局的储存信息的空间,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象

二.ServletContext中的常用方法

(1)Object getAttribute(String name) 返回servlet上下文中具有指定名字的对象,或使用已指定名捆绑一个对象。从Web应用的标准观点看,这样的对象是全局对象,因为它们可以被同一servlet在另一时刻访问。或上下文中任意其他servlet访问。

(2)void setAttribute(String name,Object obj) 设置servlet上下文中具有指定名字的对象。

(3)Enumeration getAttributeNames() 返回保存在servlet上下文中所有属性名字的枚举。

(4)String getInitParameter(String name) 返回指定上下文范围的初始化参数值。此方法与ServletConfig方法名称不一样,后者只应用于已编码的指定servlet。此方法应用于上下文中所有的参数。

(5)Enumeration getInitParameterNames() 返回(可能为空)指定上下文范围的初始化参数值名字的枚举值。

(6)InputStream getResourceAsStream 以 InputStream 对象的形式返回位于指定路径上的资源

(7)String getRealPath 为给定虚拟路径返回包含实际路径的 String

三.ServletContext的三个功能

1.使用ServletContext对象读取web项目中的资源文件,共有两种方式

(1)方式一:通过InputStream getResourceAsStream(java.lang.String path) :得到要操作文件的输入流

代码:
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //创建对象
        Properties p=new Properties();
        //得到ServletContext对象
        ServletContext context=getServletContext();
        //得到要操作的文件的输入流
        //文件放到src下面
        InputStream in1=context.getResourceAsStream("/WEB-INF/classes/cn/itcast/ServletContext/db3.properties");
        //文件放到webroot下面
        InputStream in2=context.getResourceAsStream("/db.properties");
        //文件放到包里面
        InputStream in3=context.getResourceAsStream("/WEB-INF/db1.properties");     
        p.load(in1);
        String url=p.getProperty("url");
        String username=p.getProperty("username");
        String password=p.getProperty("password");
        System.out.println(url+":"+username+":"+password);

(2)方式二:String getRealPath(java.lang.String path) :得到要操作文件的完全路径(带盘符的路径)

    代码:
//得到ServletContext对象
        ServletContext context=getServletContext();
        //得到文件的路径
        String path=context.getRealPath("/db.properties");
        //得到要操作的文件的输入流
        InputStream in=new FileInputStream(path);

(3)另外可以通过方式三:使用类加载器读取

代码:


//得到类的class
Class clazz=ServletDemo7.class;
//得到类的加载器
ClassLoader load=clazz.getClassLoader();
//得到要操作文件的输入流
InputStream in=load.getResourceAsStream("/db1.properties");

2.获取全局的初始化参数
(1)配置全局初始化参数

    <context-param>
        <param-name>url</param-name>
        <param-value>localhost</param-value>
      </context-param>
(2)String getInitParameter(String name) :根据名称得到全局初始化参数的值
* 代码
        //得到servletContext对象
        ServletContext context = getServletContext();
        //根据名称得到全局初始化参数的值
        String url = context.getInitParameter("url");
        String name = context.getInitParameter("name");

         Enumeration getInitParameterNames()  :得到所有的全局初始化参数的名称
        * 代码
        //得到servletContext对象
        ServletContext context = getServletContext();
        //使用方法得到所有的全局初始化参数的名称
        Enumeration<String> enumrEnumeration = context.getInitParameterNames();
        //得到每个全局初始化参数的名称
        while(enumrEnumeration.hasMoreElements()) {
            String name = enumrEnumeration.nextElement();
            String value = context.getInitParameter(name);
            System.out.println(name+" :: "+value);
        }

3.多个Servlet通过ServletContext对象实现数据共享。ServletContext对象通常也被称之为context域对象
存值:setAttribute(String name, Object object)
取值:getAttribute(String name)

代码:
    在InitServlet的Service方法中利用ServletContext对象存入需要共享的数据
    /*获取ServletContext对象*/  
    ServletContext context = this.getServletContext();   
    //存入共享的数据    
    context.setAttribute("name", "zhangsan"); 

    在其它的Servlet中利用ServletContext对象获取共享的数据   
    /*获取ServletContext对象*/  
    ServletContext context = this.getServletContext();   
    //获取共享的数据   
    String name = context.getAttribute("name");   
    System.out.println("共享的内容值是:"+name);  
内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值