spring学习笔记--在自定义servlet中获取到spring的applicationcontext
2015-10-28 16:08
337 查看
需要做一个参数初始化类,当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.
,并把这些参数放置到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.
相关文章推荐
- 微信企业号,发消息或获取人员信息时报no privilege to access/modify contact/party/agent
- SWIFT——字符
- iOS程序退出后的本地通知
- web app iphone4 iphone5 iphone6 iphone6 Plus响应式布局 适配代码
- Android 中 px和dp 的转换
- iOS BLE开发关键步骤
- [Android基础知识][1] SpannableString属性详解
- 关于Objective-C
- Objective-C 程序设计 第七章
- <iOS>一个开发中值得注意的细节
- 关于UMeng分享iOS9上配置NSAppTransportSecurity导致UIWebView无法访问渣浪微博
- Android屏幕适配经验谈
- 腾讯大讲堂:发10亿个红包,微信为啥没崩溃?
- Android把res/raw的资源转化为Uri形式访问(android.resource://)
- perform selector may cause a leak in ARC
- Hibernate is not mapped [from
- Json JsonObject JsonArray
- iOS无限滚动,实现ios原生日历
- iOS程序性能优化
- 实现FPGA Verilog HDL与NIOS II的通信数据交换——利用AVALON总线