美文网首页
ServletContext

ServletContext

作者: 丫甘九 | 来源:发表于2019-04-01 19:05 被阅读0次

ServletContext概述

服务器会为每个应用创建一个一个ServletContext对象

  • ServletContext对象的创建是在服务器启动时完成的

  • ServletContext对象的销毁是在服务器关闭时完成的
    ServletContext对象的作用是在整个web应用的动态资源之间共享数据,例如在AServlet中向ServletContext对象中保存一个值,然后再BServlet中就可以获取这个值,这就是共享数据了

    一个项目只有一个ServletContext对象,
    我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据,“与天地同寿”!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会死去。

获取ServletContext对象

  • ServletContext#getServletContext()
  • GenericServlet#getServletContext()
  • HttpSession#getServletContext()
  • ServletContextEvent#getServletContext()
    在Servlet中获取ServletContext()对象:
    在void init(ServletConfig config)中:ServletContext() context = cinfig.getServletContext();,ServletConfig类的getServletContext()方法可以用来获取ServletContext对象
    在GenericServlet或HttpServlet中获取ServletContext对象:
    GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;

演示ServletContext()

域对象的功能

ServletContext()是javaweb四大域对象之一

  • PageContext;
    ServletRequest;
  • HttpSession;
  • ServletContext();
    所有域对象都有存取数据的功能。因为域对象内部有一个Map,用来存储数据,下面是ServletContext()对象用来操作数据的方法:
  • void setAttribute(String name,Object value):用来储存一个对象,也可以称之为储存一个域属性,例如ServletContext().setAttribute("xxx","XXX"),在ServletContext()保存了一个域属性,域属性名称为xxx,值为XXX,请注意,如果多次调用该方法,并且使用相同的name,那么就会覆盖上一次的值,这一点特性与Map相同
  • object Attribute(String name):同来获取ServletContext()中的数据,当然在获取之前需要保存才行,例如String value = (String)ServletContext(). getAttribute("xxx"),获取名为xxx的域属性
  • void removeAttribute(String name) :用来移除ServletContext()中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做
  • Enumeration getAttributeNames():获取所有域属性的名称
package baoming;

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;

public class EServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*1、获取ServletContext对象
        * 2、调用其setAttribute()保存数据*/
        ServletContext application = this.getServletContext();
        application.setAttribute("name","张三");
    }
}

package baoming;

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;

public class FServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*1、获取ServletContext对象
         * 2、调用其getAttribute()保存数据*/
        ServletContext application = this.getServletContext();
        String name = (String)application.getAttribute("name");
        System.out.println(name);

    }

}

获取应用初始化参数

  • Servlet也可以获取初始化参数,但它是局部的参数,也就是说,一个servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个servlet准备
    还可以使用ServletContext来获取web.xml文件中配置的应用初始化参数,注意,应用初始化参数与servlet初始化参数不同
package baoming;

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;

public class GServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*1、获取ServletContext对象
         * 2、调用其getInitParameter)保存数据*/
        ServletContext application = this.getServletContext();
       String value = application.getInitParameter("Context-param");
        System.out.println(value);

    }
}

<context-param>
        <param-name>Context-param</param-name>
        <param-value>Context-value</param-value>
    </context-param>

获取指定目录下所有路径资源。例如web-inf下所有资源的路径

image.png image.png

相关文章

网友评论

      本文标题:ServletContext

      本文链接:https://www.haomeiwen.com/subject/nrzvbqtx.html