Spring整合Struts
雖然Spring也提供了自己的MVC組件
但一來Spring的MVC組件過於繁瑣
二 來Struts的擁護者實在太多
因此
很多項目都會選擇使用Spring整合Struts框架
而且Spring確實可以無縫整合Struts框架
二者結合成一個更實際的J
EE開發平台
使用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
sprntext
ContextLoaderListener
</listener
class>
</listener>
如 果有多個配置文件需要載入
則考慮使用<context
param>元素來確定配置文件的文件名
ContextLoaderListener加載時
會查找名為contextConfigLocation的參數
因此
配置context
param時
參數名字應該是contextConfigLocation
帶多個配置文件的web
xml文件如下
<?xml version=
encoding=
GBK
?>
<!
指定Web配置文件的根元素
以及相應的Schema信息
>
<web
app xmlns=
java
sun
/xml/ns/j
ee
xmlns:xsi=
/
/XMLSchema
instance
xsi:schemaLocation=
java
sun
/xml/ns/j
ee
java
sun
/xml/ns/j
ee/web
app_
_
xsd
version=
>
<!
確定多個配置文件
>
<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
sprntext
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=
encoding=
UTF
?>
<web
app version=
xmlns=
/xml/ns/javaee
xmlns:xsi=
/
/XMLSchema
instance
xsi:schemaLocation=
/xml/ns/javaee
/xml/ns/javaee/web
app_
_
xsd
>
<!
使用ContextLoaderListener初始化Spring容器
>
<listener>
<listener
class>org
sprntext
ContextLoaderListener</listener
class>
</listener>
<!
定義Struts
的FilterDispathcer的Filter
>
<filter>
<filter
name>struts
</filter
name>
<filter
class>org
apache
struts
dispatcher
ng
filter
StrutsPrepareAndExecuteFilter</filter
class>
</filter>
<!
FilterDispatcher用來初始化Struts
並且處理所有的WEB請求
>
<filter
mapping>
<filter
name>struts
</filter
name>
<url
pattern>/*</url
pattern>
</filter
mapping>
<welcome
file
list>
<welcome
file>l</welcome
file>
</welcome
file
list>
</web
app>
struts
的配置文件struts
xml可能如下
<?xml version=
encoding=
UTF
?>
<!DOCTYPE struts PUBLIC
//Apache Software Foundation//DTD Struts Configuration
//EN
/dtds/struts
dtd
>
<struts>
<constant name=
struts
devMode
value=
true
/>
<constant name=
struts
action
extension
value=
do
action
/>
<constant name=
struts
i
n
encoding
value=
UTF
/>
<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>
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28457.html