<context-param>标签,

比如

<context-param>
        <param-name>breed</param-name>
        <param-value>test</param-value>

</context-param>

应用在容器中启动之后,整个应用任何一个servlet都可以通过getContextConfig获取breed的值。

但是如果我们需要在项目启动的时候获取一个对象呢,而不仅仅是一个字符串呢?

我们可以通过写一个类实现ServletContextListener接口实现这一点。

package javax.servlet;import java.util.EventListener;public abstract interface ServletContextListener extends EventListener
{public abstract void contextInitialized(ServletContextEvent paramServletContextEvent);public abstract void contextDestroyed(ServletContextEvent paramServletContextEvent);
}

在web.xml中配置

<listener>
        <listener-class>
            servlet.ServletContextListenerTest
        </listener-class>
  </listener>

ServletContextListenerTest实现一个ServletContextListener的接口

package servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class ServletContextListenerTest implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent event) {}@Overridepublic void contextInitialized(ServletContextEvent event) {System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");ServletContext sc = event.getServletContext();String dogBreed  = sc.getInitParameter("breed");System.out.println("aaaaaaaaaaaaaa"+dogBreed);Dog dog = new Dog(dogBreed);event.getServletContext().setAttribute("dog", dog);}}

上面的代码主要是实现了在应用启动的时候,将一个dog对象塞进ServletContext的attribute属性中,

这样应用的所有servlet就可以通过getAttribute共享这个dog对象了。

Dog类

package servlet;public class Dog {public String breed;public String getBreed() {return breed;}public void setBreed(String breed) {this.breed = breed;}public Dog(String breed) {this.breed=breed;}public void getDogBreed() {System.out.println("the breed of the dog is"+breed);}
}

写一个情景类

package servlet;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns={"/servletContextListenerTestClient"})
public class ServletContextListenerTestClient extends HttpServlet{private static final long serialVersionUID = -5169172101637034615L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {Dog dog = (Dog)this.getServletContext().getAttribute("dog");dog.getDogBreed();}}

转载于:https://my.oschina.net/liangzhenghui/blog/184468

ServletContextListener相关推荐

  1. 引入 ServletContextListener @Autowired null 解决办法

    public class ScheduleController implements ServletContextListener {@Autowiredprivate ScheduleService ...

  2. java 日志输出 上下文_java – 使用ServletContextListener和SLF4J在contextDestroyed上没有日志输出...

    我正在尝试向记录器写一条消息(Vaadin)servlet已停止,这使用SLF4J和Log4j2. 为此,我使用的是ServletContextListener,它在应用程序启动时记录消息.但是在co ...

  3. ServletContextListener接口用法

    ServletContextListener接口用于tomcat启动时自动加载函数,方法如下: 一.需加载的类必须实现ServletContextListener接口. 二.该接口中有两个方法必须实现 ...

  4. Java ServletContextListener监听器的使用

    ServletContextListener监听器的作用 用来监听ServletContext域对象的创建和销毁的监听器. ServletContext创建和销毁 ServletContext 创建: ...

  5. ServletContextListener 解析用法

    ServletContext 被 Servlet 程序用来与 Web 容器通信.例如写日志,转发请求.每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享.因为Context可 ...

  6. 解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

    解决Tomcat下IntelliJ IDEA报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener   笔者在做代 ...

  7. Java ServletContextListener用法

    ServletContext 被 Servlet 程序用来与 Web 容器通信.例如写日志,转发请求.每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享.因为Context可 ...

  8. ServletContextListener在Springboot中的使用

    ServletContextListener是servlet容器中的一个API接口, 它用来监听ServletContext的生命周期,也就是相当于用来监听Web应用的生命周期.今天我们就来说说如何在 ...

  9. springboot ServletContextListener接口

    常用于用来做一些项目启动时的初始化工作 实现ServletContextListener @WebListener 声明监听器 启动类添加@ServletComponentScan 或者直接用@Con ...

最新文章

  1. Oracle在线重定义
  2. [androd] android的在线源码网站,各个版本都有(目前已到俺android 4.2,但不包含kernel部分的代码)
  3. 还不懂你现在学习的编程语言能做什么?还不懂如何进阶?过来看图
  4. kafka调试工具kafkacat的使用
  5. 配置文件默认有项目路劲_SpringBoot 深度调优,让你的项目飞起来!
  6. 元旦,请查收程序员专属祝福礼!
  7. Linux学习笔记四:OTG方式为itop4412烧写安卓系统
  8. 年薪百万是社会认同,更是自身价值体现
  9. Windows mobile美化之-短信界面美化修改~
  10. Mysql查询某列最长字符串记录
  11. mac install torch0.4.1
  12. php 1==#039;a1#039;,关于新版本1.9.14.6 加固 dex version 为 039 导致9.0以下无法修复的问题及疑惑。...
  13. MSSQL 2000 不支持top 解决方法
  14. 在‘句子迷’爬取网友总结的方文山歌词并作词频统计
  15. Kotlin关键字总结
  16. ++a与a++、--a与a--
  17. 建立备份域控服务器,备份域控制器
  18. IEEE会议latex模板参考文献转为bibitem
  19. 软件测试常用的linux命令
  20. 海力士芯片 HY57V561620FTP-H 的内存容量问题

热门文章

  1. 阶乘的精确值大数阶乘
  2. Ubuntu下Qt中使用pcl库
  3. LeetCode第一刷--leetcode提交格式介绍与273. Integer to English Words
  4. NYOJ 741 数学家ST
  5. NYOJ 137 取石子(三)
  6. 【转】Yahoo!团队:网站性能优化的35条黄金守则
  7. SOP,TSSOP,PLCC,BGA这些封装的中英文解释
  8. c++学习笔记之成员函数
  9. Matlab计算速度优化(矩阵,bsxfun,repmat)
  10. 关于fseek不能定位大于2G文件的问题