分類  >  Web前端 >

轉:web程序的初始化有關問題——ServletContextListener-調試成功

tags:    時間:2013-12-10 00:38:17
轉:web程序的初始化問題——ServletContextListener----調試成功

當web伺服器啟動后,它會去解析web.xml,如果我們需要在服務啟動以後做一些初始化,那麼可以在web.xml中配置ServeltContextListener來達到初始化,因為Web應用程序的「初始階段」,Servlet容器會調用ServletContextListener對象的contextInitialized()方法

   public class MyWebContextListener implements ServletContextListener{

// @Override
 public void contextDestroyed(ServletContextEvent event) {
  
 }

// @Override
 public void contextInitialized(ServletContextEvent event) {
  SpringConfig.init(event.getServletContext());
  DataManage.getInstance();
 }

}

然後將這個WebContextListener配到web.xml中即可

     <listener>
        <listener-class>com.MyWebContextListener</listener-class>
    </listener>

在初始化階段,web容器(如tomcat)將會調用這個 contextInitialized方法,這時如果我們需要Spring的ApplicationContext對象時,就可以在init方法中實現:

 public class SpringConfig {
 private static ApplicationContext springContext;
 public static void init(ServletContext servletContext) {
  springContext=WebApplicationContextUtils.getWebApplicationContext(servletContext);
 }
 
 public static ApplicationContext getSpringContext(){
  return springContext;
 }
}

這樣我們就可以通過單例模式得到的ApplicationContext對象springContext來隨意地取得所需要的service bean了:

public class DataManage {
 private static DataManage instance;
 private TaskTypeService taskTypeSV=(TaskTypeService) SpringConfig.getSpringContext()
 .getBean("taskTypeService");
 private StageService stageSV=(StageService) SpringConfig.getSpringContext()
 .getBean("stageService");
 private ProjectService projectSV=(ProjectService) SpringConfig.getSpringContext()
 .getBean("projectService");
// private ProjectTypeService projectTypeSV;
 private UserService userSV=(UserService) SpringConfig.getSpringContext()
 .getBean("userService");
 private CategoryService categorySV=(CategoryService) SpringConfig.getSpringContext()
 .getBean("categoryService");

 

web程序的初始化問題——ServletContextListener----調試成功

原文:http://wanchuyang.blogbus.com/logs/2005/01/566411.html  
web程序的初始化問題——ServletContextListener
時間: 2005-01-04

應用ServletContextListener介面,可以實現在web應用程序初始化時,自動運行一些初始化程序。

ServletContextListener介面定義的方法

方法名稱

調用時機

Void contextInitialized(ServletContextEvent sce)

Web應用程序的「初始階段」,Servlet容器會調用ServletContextListener對象的contextInitialized()方法

Void contextDestroyed(ServletContextEvent sce)

Web應用程序的「結束階段」,Servlet容器會調用ServletContextListener對象的contextDestoryed()方法

應用此介面時,要在web.xml文件內定義「監聽器類」的名稱,此時要注意:

在Servlet規範中並未限制一個Web應用程序只能對應一個「監聽器類」,但是在web.xml內定義<listener>元素時得注意下列兩點:
<listener>元素必須出現在任何Context起始參數(由<context-param>元素所定義)之後。
<listener>元素必須出現在任何Servlet實體(由<servlet>元素所定義)之前。

舉例:

web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
    version="2.4">

    <description>
      test servlet listener
    </description>
    <display-name>testServletListener</display-name>
 <listener>
  <listener-class>com.chuyang.Test
   </listener-class>
</listener>
 
</web-app>

Test.java:

package com.chuyang;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class Test implements ServletContextListener {
 public void contextInitialized(ServletContextEvent event) {
  System.out.println("servlet initialized.........");
 }
 public void contextDestroyed(ServletContextEvent event) {
  System.out.println("servlet destroyed..........");
 }
}

推薦閱讀文章

Bookmark the permalink ,來源:互聯網