Servlet其他关联类---ServletContext类

1.ServletContext介绍

<1>域对象

  • 域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象,共享数据的能力也不一样。
  • 在Servlet规范中,一共有4个域对象。ServletContext就是其中的一个。它也是web应用中最大的作用域,也叫application域。它可以实现整个应用之间的数据共享!
    <2>ServletContext是应用上下文对象(应用域对象);
  • 每一个应用中只有一个ServletContext对象;
  • 作用:可以配置和获得应用的全局初始化参数;
  • 可以实现Servlet之间的数据共享;
  • 生命周期:应用一加载则创建,应用被停止则销毁。
2.配置和获取全局参数

【每一个应用只有一个ServletContext对象,故定义在Service标签外】
<1>配置全局参数

<!--配置全局编码-->
<context-param>
    <param-name>globalEncoding</param-name>
    <param-value>utf-8</param-value>
</context-param>

<!--配置全局描述信息-->
<context-param>
    <param-name>globalDesc</param-name>
    <param-value>我是ServletContext的描述信息</param-value>
</context-param>

<2>获取全局参数

public class ServletContextDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();
        //获取全局配置参数:getInitParameter(String key)根据key获取value
        Enumeration<String> ParameterNames = context.getInitParameterNames();
        while (ParameterNames.hasMoreElements()) {
            String name = ParameterNames.nextElement();
            String value = context.getInitParameter(name);
            System.out.println(name + "..." + value);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

打印结果:
-------------------------------------------------------------------
globalEncoding...utf-8
globalDesc...我是ServletContext的描述信息
3.设置共享数据和获取真实路径

【每一个应用只有一个ServletContext对象,故在每个Service标签内可以共享和删除数据】

public class ServletContextDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = this.getServletContext();
        //1.设置共享数据
        context.setAttribute("username","zhangsan");
        context.setAttribute("password","123456");
        System.out.println("Servlet1已存储到数据");
        //删除共享数据
        /*context.removeAttribute("username");
        System.out.println("Servlet1已删除数据");*/

        /*String charset = context.getInitParameter("charset");
        System.out.println(charset);*/
        //2.//获取应用的虚拟目录: getContextPath()
        String contextPath = context.getContextPath();
        System.out.println(contextPath);
        //3.根据虚拟目录获取绝对路径: getRealPath(String path)
        //用户通过浏览器访问的是服务器上的路径
        //获得虚拟目录的绝对路径(服务器中的路径)
        String servletRealpath = context.getRealPath("/");
        System.out.println(servletRealpath);
        //获取web/a.txt的绝对路径
        String webPath = context.getRealPath("/a.txt");
        System.out.println(webPath);
        //获取WEB-INF的绝对路径
        String webInPath = context.getRealPath("WEB-INF/a.txt");
        System.out.println(webInPath);
        //获取src/a.txt的绝对路径
        String srcPath = context.getRealPath("WEB-INF/classes/a.txt");
        System.out.println(srcPath);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}


打印结果:
-----------------------------------------------------------------
Servlet1已存储到数据
/day03_ServletContextDemo_war_exploded
D:\javaWeb-project\out\artifacts\day03_ServletContextDemo_war_exploded\
D:\javaWeb-project\out\artifacts\day03_ServletContextDemo_war_exploded\a.txt
D:\javaWeb-project\out\artifacts\day03_ServletContextDemo_war_exploded\WEB-INF\a.txt
D:\javaWeb-project\out\artifacts\day03_ServletContextDemo_war_exploded\WEB-INF\classes\a.txt
26-Jul-2021 21:50:03.584 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\apache-tomcat-9.0.5\apache-tomcat-9.0.50\webapps\manager]
26-Jul-2021 21:50:03.617 信息 [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[D:\apache-tomcat-9.0.5\apache-tomcat-9.0.50\webapps\manager]的部署已在[33]毫秒内完成
Servlet2已获取到数据
zhangsan...123456

注:
<1>打印情况为浏览器先访问ServletContextDemo1再访问ServletContextDemo2;如果先访问ServletContextDemo2则获取的数据为null…null
<2>移除共享数据时,移除对应的字符,不会影响其他的值,如移除’zhangsan‘,ServletContextDemo2获取的打印结果为null…123456

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪雨岁岁年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值