Spring整合Struts
虽
然Spring也提供了自己的MVC组件,但一来Spring的MVC组件过于繁琐,二
来Struts的拥护者实在太多。因此,很多项目都会选择使用Spring整合Struts框架。而且Spring确实可以无缝整合Struts框架,二
者结合成一个更实际的J2EE开发平台。
使用Spring的Web应用时,不用手动创建Spring容器,而是通过配置文件声明式地创建Spring容器。因此,在Web应用中创建Spring容器有如下两个方式:
● 直接在web.xml文件中配置创建Spring容器。
● 利用第三方MVC框架的扩展点,创建Spring容器。
其实第一种创建Spring容器的方式更加常见。为了让Spring容器随Web应用的启动而自动启动,有如下两个方法:
● 利用ServletContextListener实现。(推荐)
● 采用load-on-startup Servlet实现。
Spring
提供ServletContextListener的一个实现类ContextLoaderListener,该类可以作为Listener使用,会在创
建时自动查找WEB-INF/下的applicationContext.xml文件,因此,如果只有一个配置文件,并且文件名为
applicationContext.xml,只需在web.xml文件中增加如下配置片段即可:
- <listener>
-
<listener-class>org.springframework.web.context. ContextLoaderListener
-
</listener-class>
-
</listener>
如
果有多个配置文件需要载入,则考虑使用元素来确定配置文件的文件名。
ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置context-
param时,参数名字应该是contextConfigLocation。
带多个配置文件的web.xml文件如下:
- <?xml version="1.0" encoding="GBK"?>
-
-
<!-- 指定Web配置文件的根元素,以及相应的Schema信息 -->
-
-
<web-app xmlns=""
-
-
xmlns:xsi=""
-
-
xsi:schemaLocation="
-
/web-app_2_4.xsd"
-
-
version="2.4">
-
-
<!-- 确定多个配置文件 -->
-
-
<context-param>
-
-
<!-- 参数名为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会自动查找application-
Context.xml配置文件;如果有contextConfigLocation,则利用该参数确定的配置文件。如果无法找到合适的配置文件,
Spring将无法正常初始化。
Spring
根据bean定义创建WebApplicationContext对象,并将其保存在web应用的ServletContext中。大部分情况下,应用中
的Bean无须感受到ApplicationContext的存在,只要利用ApplicationContext的IoC即可。
如果需要在应用中获取ApplicationContext实例,可以通过如下代码获取:
//获取当前Web应用的Spring容器
- WebApplicationContext ctx =
-
-
WebApplicationContextUtils.getWebApplicationContext(servletContext);
除此之外,Spring提供了一个特殊的Servlet类ContextLoaderServlet。该Servlet在启动时,会自动查找WEB-INF/下的applicationContext.xml文件。
完整的web.xml文件可能如下:
- <?xml version="1.0" encoding="UTF-8"?>
-
<web-app version="2.5" xmlns=""
-
xmlns:xsi=""
-
xsi:schemaLocation="
-
/web-app_2_5.xsd">
-
-
<!-- 使用ContextLoaderListener初始化Spring容器 -->
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
-
-
<!-- 定义Struts 2的FilterDispathcer的Filter -->
-
<filter>
-
<filter-name>struts2</filter-name>
-
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
-
</filter>
-
<!-- FilterDispatcher用来初始化Struts 2并且处理所有的WEB请求。 -->
-
<filter-mapping>
-
<filter-name>struts2</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
-
<welcome-file-list>
-
<welcome-file>index.html</welcome-file>
-
</welcome-file-list>
-
</web-app>
struts2的配置文件struts.xml可能如下:
- <?xml version="1.0" encoding="UTF-8"?>
-
<!DOCTYPE struts PUBLIC
-
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-
"">
-
-
<struts>
-
<constant name="struts.devMode" value="true" />
-
<constant name="struts.action.extension" value="do,action" />
-
<constant name="struts.i18n.encoding" value="UTF-8" />
-
-
<package name="aboutlogin" extends="struts-default">
-
-
<action name="login" class="loginAction" method="CheckUser">
-
<result name="success">/WEB-INF/pages/Home.jsp</result>
-
<result name="input">/WEB-INF/pages/login.jsp</result>
-
<result name="failed">/WEB-INF/pages/login.jsp</result>
-
</action>
-
-
</package>
-
-
<include file="struts-information.xml" />
-
-
</struts>
阅读(1162) | 评论(0) | 转发(0) |