Spring整合Struts
虽然Spring也提供了自己的MVC组件但一来Spring的MVC组件过于繁琐二 来Struts的拥护者实在太多因此很多项目都会选择使用Spring整合Struts框架而且Spring确实可以无缝整合Struts框架二者结合成一个更实际的JEE开发平台
使用Spring的Web应用时不用手动创建Spring容器而是通过配置文件声明式地创建Spring容器因此在Web应用中创建Spring容器有如下两个方式
● 直接在webxml文件中配置创建Spring容器
● 利用第三方MVC框架的扩展点创建Spring容器
其实第一种创建Spring容器的方式更加常见为了让Spring容器随Web应用的启动而自动启动有如下两个方法
● 利用ServletContextListener实现(推荐)
● 采用loadonstartup Servlet实现
Spring 提供ServletContextListener的一个实现类ContextLoaderListener该类可以作为Listener使用会在创 建时自动查找WEBINF/下的applicationContextxml文件因此如果只有一个配置文件并且文件名为 applicationContextxml只需在webxml文件中增加如下配置片段即可
<listener>
<listenerclass>orgsprntext ContextLoaderListener
</listenerclass>
</listener>
如 果有多个配置文件需要载入则考虑使用<contextparam>元素来确定配置文件的文件名 ContextLoaderListener加载时会查找名为contextConfigLocation的参数因此配置context param时参数名字应该是contextConfigLocation
带多个配置文件的webxml文件如下
<?xml version= encoding=GBK?>
<! 指定Web配置文件的根元素以及相应的Schema信息 >
<webapp xmlns=javasun/xml/ns/jee
xmlns:xsi=//XMLSchemainstance
xsi:schemaLocation=javasun/xml/ns/jee
javasun/xml/ns/jee/webapp__xsd
version=>
<! 确定多个配置文件 >
<contextparam>
<! 参数名为contextConfigLocation >
<paramname>contextConfigLocation</paramname>
<! 多个配置文件之间以隔开 >
<paramvalue>/WEBINF/daoContextxml/WEBINF/
applicationContextxml</paramvalue>
</contextparam>
<! 采用listener创建ApplicationContext实例 >
<listener>
<listenerclass>orgsprntext
ContextLoaderListener</listenerclass>
</listener>
</webapp>
如 果没有通过contextConfigLocation指定配置文件Spring会自动查找application Contextxml配置文件如果有contextConfigLocation则利用该参数确定的配置文件如果无法找到合适的配置文件 Spring将无法正常初始化
Spring 根据bean定义创建WebApplicationContext对象并将其保存在web应用的ServletContext中大部分情况下应用中 的Bean无须感受到ApplicationContext的存在只要利用ApplicationContext的IoC即可
如果需要在应用中获取ApplicationContext实例可以通过如下代码获取
//获取当前Web应用的Spring容器
WebApplicationContext ctx =
WebApplicationContextUtilsgetWebApplicationContext(servletContext)
除此之外Spring提供了一个特殊的Servlet类ContextLoaderServlet该Servlet在启动时会自动查找WEBINF/下的applicationContextxml文件
完整的webxml文件可能如下
<?xml version= encoding=UTF?>
<webapp version= xmlns=/xml/ns/javaee
xmlns:xsi=//XMLSchemainstance
xsi:schemaLocation=/xml/ns/javaee
/xml/ns/javaee/webapp__xsd>
<! 使用ContextLoaderListener初始化Spring容器 >
<listener>
<listenerclass>orgsprntextContextLoaderListener</listenerclass>
</listener>
<! 定义Struts 的FilterDispathcer的Filter >
<filter>
<filtername>struts</filtername>
<filterclass>orgapachestrutsdispatcherngfilterStrutsPrepareAndExecuteFilter</filterclass>
</filter>
<! FilterDispatcher用来初始化Struts 并且处理所有的WEB请求 >
<filtermapping>
<filtername>struts</filtername>
<urlpattern>/*</urlpattern>
</filtermapping>
<welcomefilelist>
<welcomefile>l</welcomefile>
</welcomefilelist>
</webapp>
struts的配置文件strutsxml可能如下
<?xml version= encoding=UTF?>
<!DOCTYPE struts PUBLIC
//Apache Software Foundation//DTD Struts Configuration //EN
/dtds/strutsdtd>
<struts>
<constant name=strutsdevMode value=true />
<constant name=strutsactionextension value=doaction />
<constant name=strutsinencoding value=UTF />
<package name=aboutlogin extends=strutsdefault>
<action name=login class=loginAction method=CheckUser>
<result name=success>/WEBINF/pages/Homejsp</result>
<result name=input>/WEBINF/pages/loginjsp</result>
<result name=failed>/WEBINF/pages/loginjsp</result>
</action>
</package>
<include file=strutsinformationxml />
</struts>