zoukankan      html  css  js  c++  java
  • servletConfig和ServletContext 以及servletContextListener介绍

    <servlet>
        <servlet-name>BeerParamTests</servlet-name>
        <servlet-class>TestInitParams</servlet-class>

        <init-param>
            <param-name>addEmail</param-name>
            <param-value>lik@qq.com</param-name>
        </init-param>
    </servlet>

    在servlet代码中能够通过
    getServletConfig().getInitParameter("addEmail"):


    调用getServletConfig() 不能在初始化參数之前调用 不能在init中调用 必须等servlet载入完才干够调用.
    ********容器初始化一个servlet时,会为这个Servlet创建一个唯一的ServletConfig********


    创建servletConfig步骤:


    1.容器读取Servlet部署文件,包含servlet的初始化參数(init-param)
    2.容器为这个servlet创建一个新的servletConfig实例
    3.容器为每一个servlet初始化參数创建一个键值对。


    4.容器向ServletConfig提供键值对初始化參数的引用.
    5.容器创建servlet类的一个新实例
    6.容器调用servlet的init方法 传入servletCOnfig的引用.


    容器仅仅会读一次Servlet初始化參赛,在Servlet生命周期中无法改变这个值,除非又一次部署servlet.



    上下文初始化參数,不不过针对一个Servlet可用。它是针对整个web应用,应用中全部Servlet和jsp都自己主动的能訪问
    上下文初始化參数。能够在web.xml中配置。
    <servlet>
    </servlet>
    <context-param>
        <param-name>add</param-name>
        <param-value></param-value>
    </context-param>


    在代码中,getServletContext().getInitParameter("add");
    或者ServletContext context = getServletContext();
    context.getInitParameter("add");


    每一个servlet一个ServletConfig
    每一个web应用一个ServletContext

    假设web应用是分布的,那么每一个jvm就会有一个servletcontext,假设应用分布在多个server上
    那么web应用实际上能够有多个servletContext。

    一个ServletContext确实仅仅相应一个应用。可是前提是应用
    在一个jvm中.
    servletContext和ServletConfig仅仅有获取的方法,没有设置的值的方法。都是常量。



    两种方法获取ServletContext对象
    getServletConfig().getServletContext().getInitParameter();
    或者
    this.getServletConfig().getServletContext();


    ServletContextListener 监听ServletContext一生中关键两个事件。初始化和撤销.
    ServletContextListener能够做的工作:
    1.上下文初始化时候的能够做:从servletContext得到上下文初始化參赛。
    使用初始化參数查找名建立一个数据库连接
    把数据库连接存储为一个属性,使得web应用各个部分都能訪问

    上下文撤销时:
    关闭数据库连接


    public class MyServletContextListener implements ServletContextListener{
        public void contextInitialized(ServletContextEvent event){
            //数据库连接代码
        }
        public void contextDestroyed(ServletContextEvent event){
            //关闭数据库连接代码
        }
    }


    以下是一个应用实例对与监听器的使用

    public class MyServletContextListener implements ServletContextListener{
        public void contextInitialized(ServletContextEvent event){
            //数据库连接代码
            ServletContext sc = event.getServletContext();
            String dogBreed = sc.getInitParameter("breed");
            Dog d = new Dog(dogBreed);
            sc.setAttribute("dog",d);//利用上下文设置属性,在其它地方就能够获得属性
        }
        public void contextDestroyed(ServletContextEvent event){
            //关闭数据库连接代码
        }
    }


    public class Dog{
        private String breed;
        public Dog(String breed){
            this.breed = breed;
        }

        public String getBreed(){
            return breed;
        }
    }


    public class ListenerTester extends HttpServlet{
        public void doGet(HttpServletRequest request,HttpServletResponse response)throws Excepton{
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            Dog dog = (Dog)getServletContext().getAttribute("dog");
            out.println(dog.getBreed());
        }
    }


    web.xml部署文件
    <servlet>
    </servlet>

    <servlet-mapping>
    </servlet-mapping>
    <context-param>
    <param-name>breed</param-name>
    <param-value>Great Dane</param-value>
    </context-param>

    <listener>
    <listener-class>
    com.gac.MyServletContextListener
    </listener-class>
    </listener>







  • 相关阅读:
    N皇后问题
    SDNU1349.快速幂入门
    SDNU1522.陆历川学数学
    埃氏筛
    快速幂
    string函数
    Golang介绍以及安装
    Promise解决回调地狱(多层调用问题)
    JavaScript动画相关
    ES6简单语法
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6904740.html
Copyright © 2011-2022 走看看