采用 ContextLoaderListener 创建 ApplicationContext

7.1.1 采用 ContextLoaderListener 创建 ApplicationContext

使用 ContextLoaderListener 创建 ApplicationContext 时,必须使服务器支持 listener,下面这些服务器都是支持Li stener 的,如果使用这些服务器,则可以使用ContextLoaderListener创建 ApplicationContext 实例:

Apache Tomcat4.x+ 。
Jetty 4.x+。
Resin2.1.8+。
Orion 2.0.2+。
BEAWebLogic8.1SP3。

Spring 提供 SeryletContextListener 的一个实现类 ContextLoaderListener,该类可以作为 listener 使用,它会在创建时自动查找 WEB-INF/下的 applicationContext.xrnl 文件。因此,如果只有一个配置文件,并且文件名为applicationContext.xrnl,则只需在 web.xrnl文件中增加如下代码即可:

<1istener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


如果有多个配置文件需要载入,则考虑使用<context-para即元素来确定配置文件的文件名。由于ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置context-param时参数名字应该是contextConfigLocation。
带多个配置文件的web.xrnl文件如下:

<!--XML 文件的文件头--〉
<?xml version="l.O"encoding="i80-8859-1"?>
<1-- web.xm1文件的DTD等信息--〉
<!DOCTYPE web-appPUBLIC "-//Sun Microsystems.i口c.//DTDWeb Application 2.3//EN"''http://java.sun.com/dtd/web-app_2_3.dtd''><web-app>
<!--确定多个配置文件>
<context-param><1--参数名为 contextConfigLocation…〉
<param-name>contextConfigLocation</param-name><!--多个配置文件之间以,隔开--〉
<param-value>/WEB-iNF/daoContext.xml./WEB-INF/applicationContext.xml
</param-value>
</context-param><!-- 采用 listener创建ApplicationContext实例-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>


如果没有 contextConfigLocation指定配置文件,则 Spring 自动查找 applicationContext.xrnl 配置文件。如果有contextConfigLocation,则利用该参数确定的配置文件。该参数指定的一个字符串,Spring 的 ContextLoaderListener 负责将该字符串分解成多个配置文件,逗号","、空格""及分号";"都可作为字符串的分割符。

如果既没有applicationContext.xrnl 文件,也没有使用contextConfigLocation参数确定配置文件,或者contextConfigLocation确定的配置文件不存在。都将导致Spring无法加载配置文件或无法正常创建 ApplicationContext 实例。

Spring 根据 bean 定义创建 WebApplicationContext 对象,并将其保存在 Web 应用的ServletContext 中。大部分情况下,应用中的bean 无须感受到 ApplicationContext的存在,只要利用 ApplicationContext的 JoC 即可。

如果需要在应用中获取ApplicationContext实例,则可以通过如下方法获取:


WebApplicationContextctx:
WebApplicationContextUtils.getWebApplicationContext(servletContext);


下面是采用 Servlet获取 ApplicationContext 的完整源代码:
public class SpringTestServlet extends HttpServlet
//Servlet的响应方法。
public voidservice(HttpServletRequestrequest,HttpServletResponse response)throws ServletException, java.io.IOException
//获取 Servlet的 ServletContext对象
ServletContext sc = getServletContext();
//使用 WebApplicationContextUtils类获得ApplicationContextWebApplicationContext ctx =WebApplicationContextUtils.getWebApplicationContext(sc);
//获取 Servlet的页面输出流
PrintWriter out = response.getWriter();
//将 ApplicationContext对象输出
out.println(ctx);


可在程序里手动获取ApplicationContext对象,然后直接输出到Servlet 的响应。将看到 ApplicationContext加载了 web.xml文件中指定的两个配置文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值