從servlet中獲取spring的WebApplicationContext


需要做一個參數初始化類,當web應用被加載時從數據庫里取出相關的參數設置

,並把這些參數放置到application里,jsp頁面可以從中取出。

1.在web.xml中配置:

< servlet >
         < servlet-name >Dispatcher </ servlet-name >
         < servlet-

class >org.springframework.web.servlet.DispatcherServlet </ servlet-

class
>
         < init-param >
             < param-name >contextConfigLocation </ param-name >
             < param-value >/WEB-INF/Dispatcher-

servlet.xml,/WEB-INF/applicationContext.xml </ param-value >
         </ init-param >
         < load-on-startup >1 </ load-on-startup >
     </ servlet >

     < servlet >
         < servlet-name >context </ servlet-name >
         < servlet-

class >org.springframework.web.context.ContextLoaderServlet </ servlet-

class
>
         < load-on-startup >2 </ load-on-startup >
     </ servlet >

     < servlet >
         < servlet-name >InitialServlet </ servlet-name >
         < servlet-

class >com.anylinks.billreturn.Web.InitialServlet </ servlet-class >
         < load-on-startup >3 </ load-on-startup >
     </ servlet >


2.servlet代碼

package com.anylinks.billreturn.Web;

import java.util.Collection;
import java.util.Iterator;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.anylinks.billreturn.BO.SysParameter;
import com.anylinks.billreturn.Service.ISysParameterService;

/*
 * 初始化Servlet,從數據庫中讀取參數表,保存在application里
 
*/
public  class InitialServlet  extends HttpServlet {

     private Log log = LogFactory.getLog( this.getClass());

     private ISysParameterService sysParameterService;

     /**
     * 從數據庫中讀取參數表,保存在application里
     *
     * 
@throws  ServletException
     *             if an error occure
     
*/
     public  void init()  throws ServletException {

        log.debug("start to intitail ");
         //  獲取WebApplicationContext
        ServletContext application = getServletContext();
        WebApplicationContext wac = WebApplicationContextUtils
                .getWebApplicationContext

(application);

         //  調用sysParameterService取出所有的系統參數
        sysParameterService = (ISysParameterService) wac
                .getBean("sysParameterService");

        Collection paras =

sysParameterService.findAllParameters();
        log.debug("sys parameters size:" + paras.size());

         //  把參數加到application里去
         for (Iterator iter = paras.iterator(); iter.hasNext

();) {
            SysParameter para = (SysParameter) iter.next

();

            application.setAttribute(para.getParaName(),

para.getParaValue());

            log.debug("initial parameter: key=" +

para.getParaName()
                    + ", value=" +

para.getParaValue());

        }
    }

}




需要注意的地方:
1.僅僅配置一個DispatcherServlet是不夠的,我開始就是這樣,然后再servlet

里面怎么取都取不到WebApplicationContext 。配置上

org.springframework.web.context.ContextLoaderServlet之后才能取的到

WebApplicationContext 。
2.注意一下<load-on-startup>3</load-on-startup>,因為用到spring的

hibernateDaoSupport,所以必須在spring加載完之后再加載InitialServlet.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM