需要做一個參數初始化類,當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 >
< 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());
}
}
}
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.