博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servletConfig和ServletContext 以及servletContextListener介绍
阅读量:5106 次
发布时间:2019-06-13

本文共 2956 字,大约阅读时间需要 9 分钟。

<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>

转载于:https://www.cnblogs.com/jzssuanfa/p/6904747.html

你可能感兴趣的文章
在iOS 8中使用UIAlertController
查看>>
js获取ip地址,操作系统,浏览器版本等信息,可兼容
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
Cadence Allegro 如何关闭铺铜(覆铜)shape的显示和设置shape显示模式–allegro小技巧...
查看>>
Atcoder Grand Contest 004 题解
查看>>
MFC中 给对话框添加背景图片
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
idea 系列破解
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)
查看>>
dependency injection
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
C#综合揭秘——细说多线程(下)
查看>>
c#运算符 ?
查看>>
ps互补色
查看>>
Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...
查看>>
【题解】青蛙的约会
查看>>
【eclipse】点Clean后没反应
查看>>
springboot下html的js中使用shiro标签功能
查看>>
求给定字符串的最长子字符串
查看>>