尚硅谷Java-web学习:Sevlet 3 - ServletContext类

三、ServletContext类

1)什么是ServletContext?

1.ServletContext是一个接口,他表示上下文对象

2.一个web工程,只有一个ServiceContext对象实例

【System.out.println(context)获取地址,代码是以文章最后的contextServlet1/contextServlet2基础上进行测试的】

3.ServletContext对象是一个域对象

4.ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

        什么是域对象?

         域对象,是可以像Map一样存取数据的对象。这里的域指的是存取数据的操作范围,整个web工程。

存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()

2)ServletContex类的四个作用

        -- 获取web.xml中配置的上下文参数context.param

        -- 获取当前的工程路径,格式:/工程路径

        -- 获取工程部署后在服务器硬盘上的绝对路径

        -- 像Map一样存取数据

创建一个Servlet程序,不要勾选下面的方框(勾选后用的是3.0注解配置):

在web.xml中添加ContextServlet配置(注意两个类名对照一致):

1.获取web.xml中配置的上下文参数context.param

        通过getServletConfig()方法获取上下文参数context.param

 2.获取当前的工程路径,格式:/工程路径

3.获取工程部署后在服务器硬盘上的绝对路径

三个板块语句的源码及运行结果:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	ServletContext context = getServletConfig().getServletContext();
	//1、获取 web.xml 中配置的上下文参数 context-param
    String username = context.getInitParameter("username");
    String password = context.getInitParameter("password");
    System.out.println("context-param参数username的值是:" + username);
    System.out.println("context-param参数password的值是:" + password);
    //2、获取当前的工程路径,格式: /工程路径
    System.out.println("当前工程路径:" + context.getContextPath());

    //3、获取工程部署后在服务器硬盘上的绝对路径
    System.out.println("当前工程部署的绝对路径是:" + 		context.getRealPath("/"));
    /* / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录;因此我们可以通过getRealPath取得web工程下文件的路径 */
}

工程路径和绝对路径的解析:【绝对路径和idea中web目录有一个对应关系】

 4.像Map一样存取数据

 contextServlet1:(注意在web.xml文件中<servlet-mapping>中添加相应的配置信息,下同)

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 	 // 获取 ServletContext 对象
 	 ServletContext context = getServletContext();
 	 System.out.println(context);
 	 
     System.out.println("保存之前:Context1 获取key1的值是:" + context.getAttribute("key1"));

     context.setAttribute("key1","value");

     System.out.println("Context1中获取域数据key1的值是:" + context.getAttribute("key1"));
 }

contextServlet2:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = getServletContext();
        System.out.println(context);

        System.out.println("Context2 中获取的数据key1的值是:" + context.getAttribute("key1"));
}

执行结果:

        首先执行contextServlet2,因为没有往context中存值,所以不管执行多少次都是null,再调用contextServlet1,在存值之前为null,存值之后显示key1的值value1,这时在调用contextServlet2,可以获取到key1的值。【ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。】

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值