如何在Java Web應(yīng)用中獲取Spring的ApplicationContext
在Web開(kāi)發(fā)開(kāi)發(fā)中,常常需要從JSP或者Servlet或者Action中獲取ApplicationContext對(duì)象,這時(shí)候,就無(wú)法使用new關(guān)鍵字通過(guò)查找配置文件來(lái)實(shí)例化ApplicationContext這個(gè)對(duì)象了。Spring通過(guò)WebApplicationContextUtils可以方便實(shí)現(xiàn)您的需求。下面看個(gè)例子:
Spring2.5+Struts2環(huán)境下
1. 配置web.xml,通過(guò)這個(gè)配置來(lái)獲取的。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> ?。糲ontext-param> ?。紁aram-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> ?。?context-param> ?。糵ilter> ?。糵ilter-name>struts2</filter-name> ?。糵ilter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> ?。?filter> <filter-mapping> ?。糵ilter-name>struts2</filter-name> <url-pattern>/*</url-pattern> ?。?filter-mapping> ?。糽istener> ?。糽istener-class>org.springframework.web.context.ContextLoaderListener</listener-class> ?。?listener> ?。約ervlet> ?。約ervlet-name>dispatcher</servlet-name> ?。約ervlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> ?。糽oad-on-startup>1</load-on-startup> </servlet> ?。約ervlet-mapping> <servlet-name>dispatcher</servlet-name> ?。紆rl-pattern>*.form</url-pattern> ?。?servlet-mapping> </web-app>
2. 在JSP、Servlet、Action中獲取ApplicationContext
<%@ page import="org.springframework.context.ApplicationContext" %>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Simple jsp page</title></head>
<body>
<%
// ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
TestService service = (TestService) ctx.getBean("testService");
String s = service.test();
out.print(s);
%>
</body>
</html>
Spring+JSP的環(huán)境
在此環(huán)境下web.xml配置會(huì)有些變化:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
?。糲ontext-param>
?。紁aram-name>contextConfigLocation</param-name>
?。紁aram-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
?。糽istener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
?。?listener>
<servlet>
?。約ervlet-name>dispatcher</servlet-name>
?。約ervlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
?。糽oad-on-startup>1</load-on-startup>
?。?servlet>
?。約ervlet-mapping>
?。約ervlet-name>dispatcher</servlet-name>
?。紆rl-pattern>*.form</url-pattern>
?。?servlet-mapping>
</web-app>
獲取的方式和上述完全一樣。
【編輯推薦】