|
如
果您想要在自己所定義的Servlet類別中使用Spring的容器功能,則也可以使用
org.springframework.web.context.ContextLoaderListener,例如在web.xml中使用<
listener>標籤加以定義: ...
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> ... ContextLoaderListener預設會讀取applicationContext.xml,您可以指定自己的定義檔,只要在<context-param>中指定"contextConfigLocation"參數,例如: ...
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/beans-config.xml, → /WEB-INF/demo-service.xml</param-value> </context-param> ... 接著您可以在自定義的Servlet中使用 org.springframework.web.context.support.WebApplicationContextUtils,從 ServletContext中取得org.springframework.web.context.WebApplicationContext,例 如: WebApplicationContext ctx =
WebApplicationContextUtils. getRequiredWebApplicationContext( this.getServletContext()); WebApplicationContext實作了ApplicationContext介面,是Spring專為Servlet的Web應用程式設計的 ApplicationContext實作類別,在取得WebApplicationContext之後,您可以利用它來取得Bean定義檔中定義的 Bean實例,例如: Date date = (Date) ctx.getBean("dateBean"); 在不支援Listener設定的容器上(例如Servlet 2.2以更早的版本),您可以使用org.springframework.web.context.ContextLoaderServlet來取代上 面的ContextLoaderListener的設定,例如: ...
<servlet> <servlet-name>contextLoader</servlet-name> <servlet-class> org.springframework.web.context.ContextLoaderServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> ... 綜合以上的敘述,撰寫一個簡單的範例來示範完整的組態方式,假設您撰寫了一個簡單的Servlet程式,作用為提供簡單的報時功能,如下所示:
package onlyfun.caterpillar; 這個Servlet中使用了WebApplicationContext來嘗試取得dateBean,您可以在web.xml中定義ContextLoaderListener與Bean定義檔的位置,例如:
<?xml version="1.0" encoding="UTF-8"?> 在<context-param>的"contextConfigLocation"屬性中,設定了Bean定義檔的位置與名稱,Bean定義檔的內容如下所示:
<?xml version="1.0" encoding="UTF-8"?> 您可以連接至TimeServlet,結果會顯示連接上的時間。 |