• 学习笔记4_ServletContext(重要整个Web应用的动态资源之间共享数据)


    ServletContext(重要)

      一个项目只有一个ServletContext对象!

      我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据!

      与天地同寿!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会死去! 

    1 ServletContext概述

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

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

      l  ServletContext对象的销毁是在服务器关闭时完成的。 

       ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。 

    2 获取ServletContext

    l  ServletConfig#getServletContext();

    l  GenericServlet#getServletContext();

    l  HttpSession#getServletContext()

    l  ServletContextEvent#getServletContext()

    [c1]   ------------ [c1]不及!

    在Servlet中获取ServletContext对象:

      l  在void init(ServletConfig config)中:ServletContext context = config.getServletContext();,

              ServletConfig类的getServletContext()方法可以用来获取ServletContext对象;

              在GenericeServlet或HttpServlet中获取ServletContext对象:

      l  GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;

      

    public class MyServlet implements Servlet {

    public void init(ServletConfig config) {

        ServletContext context = config.getServletContext();

    }

    }

    public class MyServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) {

        ServletContext context = this.getServletContext();

    }

    }

    3 域[c2] 对象的功能-------------- [c2]域对象就是用来在多个Servlet中传递数据!!!

      ServletContext是JavaWeb四大域对象之一:

    1. l  PageContext;
    2. l  ServletRequest;
    3. l  HttpSession;
    4. l  ServletContext;

      所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:

    1、 void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,

          例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。

          请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

    2、Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,

           例如:String value =  (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性;

    3、 void removeAttribute(String name):用来移除ServletContext中的域属性,

           如果参数name指定的域属性不存在,那么本方法什么都不做;

    4、 Enumeration getAttributeNames():获取所有域属性的名称;

    4 获取应用初始化参数

    l  Servlet也可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!

    l  可以配置公共的初始化参数,为所有Servlet而用!这需要使用ServletContext才能使用!

    还可以使用ServletContext来获取在web.xml文件中配置的应用初始化参数!注意,应用初始化参数与Servlet初始化参数不同:

    web.xml

    <web-app ...>

      ...

      <context-param>

        <param-name>paramName1</param-name>

        <param-value>paramValue1</param-value>    

      </context-param>

      <context-param>

        <param-name>paramName2</param-name>

        <param-value>paramValue2</param-value>    

      </context-param>

    [崔1] </web-app>

           ServletContext context = this.getServletContext();[崔2] 

           String value1 = context.getInitParameter("paramName1");

           String value2 = context.getInitParameter("paramName2");

    [崔3]        System.out.println(value1 + ", " + value2);

          

           Enumeration names = context.getInitParameterNames();[崔4] 

           while(names.hasMoreElements()) {

               System.out.println(names.nextElement());

           }


                                          [崔1]配置了两个应用初始化参数

     [崔2]获取ServletContext对象

     [崔3]通过参数名,获取参数值

     [崔4]获取所有应用初始化参数名称

    每天都做更好的自己,不纠结于输赢成败
  • 相关阅读:
    第十一周上机练习
    JAVA第十周上机练习
    JAVA第九周上机练习
    JAVA第八周作业
    JAVA第八周上机作业
    JAVA第七周作业
    Java第七周上机练习
    Java第六周作业
    JAVA第六周上机练习
    34-指针与二维数组
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4542230.html
Copyright © 2020-2023  润新知