ServletConfig和ServletContext

ServletConfig接口

Servlet运行期间,需要一些配置信息,这些信息都可以在@WebServlet注解的属性中配置。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet。ServletConfig定义了一系列获取配置信息的方法。

在这里插入图片描述

Servlet容器前面的注解:

@WebServlet(name = "MyServlet", urlPatterns = "/my-servlet",
        initParams = {
        @WebInitParam(name = "encoding", value = "UTF-8" ),
        @WebInitParam(name = "name1", value = "value1" )
}
)

getInitParameter(name)

可以直接调用getInitParameter(name),也可以初始化ServletConfig对象,用ServletConfig对象来调用getInitParameter(name)

ServletServletConfig对象和ServletContext,直接调用get...()方法是获取的ServletConfig的内容,如果要获得ServletContext的内容,一定要用ServletContext对象

    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String encoding = getInitParameter("encoding");
        String name1 = getInitParameter("name1");
        System.out.println("encoding = " + encoding);
    }

在这里插入图片描述

getInitParameterNames()

    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        Enumeration<String> initParameterNames = getServletConfig().getInitParameterNames();
        while (initParameterNames.hasMoreElements()) {
            String name = initParameterNames.nextElement();
            String value = getServletConfig().getInitParameter(name);
            System.out.println(name + " = " + value);
        }
    }

在这里插入图片描述

getServletName()

    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.out.println("Servlet name is " + getServletName());
    }

在这里插入图片描述

ServletContext接口

Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用。ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间数据的共享。

在web.xml文件中,可以配置Servlet的初始化信息,还可以配置整个Web应用的初始化信息。Web应用初始化参数的配置方式具体如下所示。

 <context-param>
      <param-name>参数名</param-name>
      <param-value>参数值</param-value>
  </context-param>

在调用时需要先初始化一个ServletContext对象

ServletContext context = getServletContext();
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        ServletContext context = getServletContext();
        Enumeration<String> initParameterNames = context.getInitParameterNames();
        while (initParameterNames.hasMoreElements()) {
            String name = initParameterNames.nextElement();
            String value = context.getInitParameter(name);
            System.out.println(name + " = " + value);
        }
    }

在这里插入图片描述

实现多个Servlet对象共享数据

由于一个Web应用中的所有Servlet共享同一个ServletContext对象,所以ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。ServletContext接口中定义了用于增加、删除、设置ServletContext域属性的四个方法。

在这里插入图片描述

读取Web应用下的资源文件

ServletContext接口定义了一些读取Web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于Web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。

在这里插入图片描述