zoukankan      html  css  js  c++  java
  • 学习笔记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]获取所有应用初始化参数名称

    每天都做更好的自己,不纠结于输赢成败
  • 相关阅读:
    EBS SQL > Form & Report
    oracle sql 优化分析点
    MRP 物料需求计划
    MRPII 制造资源计划
    Barcode128 应用实务
    Oracle SQL语句优化技术分析
    APPSQLAP10710 Online accounting could not be created. AP Invoice 无法创建会计分录
    Oracle数据完整性和锁机制
    ORACLE Responsibility Menu Reference to Other User
    EBS 常用 SQL
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4542230.html
Copyright © 2011-2022 走看看