Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2553276
  • 博文数量: 245
  • 博客积分: 4125
  • 博客等级: 上校
  • 技术积分: 3113
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-25 23:56
文章分类

全部博文(245)

文章存档

2015年(2)

2014年(26)

2013年(41)

2012年(40)

2011年(134)

2010年(2)

分类: Java

2011-10-14 15:00:31

  

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文件中增加如下配置片段即可:

  1. <listener>
  2.     <listener-class>org.springframework.web.context. ContextLoaderListener
  3.   </listener-class>
  4. </listener>

如 果有多个配置文件需要载入,则考虑使用元素来确定配置文件的文件名。 ContextLoaderListener加载时,会查找名为contextConfigLocation的参数。因此,配置context- param时,参数名字应该是contextConfigLocation。

带多个配置文件的web.xml文件如下:

  1. <?xml version="1.0" encoding="GBK"?>

  2. <!-- 指定Web配置文件的根元素,以及相应的Schema信息 -->

  3. <web-app xmlns=""

  4.     xmlns:xsi=""

  5.     xsi:schemaLocation="
  6.     /web-app_2_4.xsd"

  7.     version="2.4">

  8.     <!-- 确定多个配置文件 -->

  9.     <context-param>

  10.         <!-- 参数名为contextConfigLocation -->

  11.         <param-name>contextConfigLocation</param-name>

  12.         <!-- 多个配置文件之间以“,”隔开 -->

  13.         <param-value>/WEB-INF/daoContext.xml,/WEB-INF/
  14.         applicationContext.xml</param-value>

  15.     </context-param>

  16.     <!-- 采用listener创建ApplicationContext实例 -->

  17.     <listener>

  18.         <listener-class>org.springframework.web.context.
  19.         ContextLoaderListener</listener-class>

  20.     </listener>

  21. </web-app>

如 果没有通过contextConfigLocation指定配置文件,Spring会自动查找application- Context.xml配置文件;如果有contextConfigLocation,则利用该参数确定的配置文件。如果无法找到合适的配置文件, Spring将无法正常初始化。

Spring 根据bean定义创建WebApplicationContext对象,并将其保存在web应用的ServletContext中。大部分情况下,应用中 的Bean无须感受到ApplicationContext的存在,只要利用ApplicationContext的IoC即可。

如果需要在应用中获取ApplicationContext实例,可以通过如下代码获取:

//获取当前Web应用的Spring容器


  1. WebApplicationContext ctx =

  2.  WebApplicationContextUtils.getWebApplicationContext(servletContext);

除此之外,Spring提供了一个特殊的Servlet类ContextLoaderServlet。该Servlet在启动时,会自动查找WEB-INF/下的applicationContext.xml文件。


完整的web.xml文件可能如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns=""
  3.     xmlns:xsi=""
  4.     xsi:schemaLocation="
  5.     /web-app_2_5.xsd">

  6.     <!-- 使用ContextLoaderListener初始化Spring容器 -->
  7.     <listener>
  8.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  9.     </listener>

  10.     <!-- 定义Struts 2的FilterDispathcer的Filter -->
  11.     <filter>
  12.         <filter-name>struts2</filter-name>
  13.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  14.     </filter>
  15.     <!-- FilterDispatcher用来初始化Struts 2并且处理所有的WEB请求。 -->
  16.     <filter-mapping>
  17.         <filter-name>struts2</filter-name>
  18.         <url-pattern>/*</url-pattern>
  19.     </filter-mapping>

  20.     <welcome-file-list>
  21.         <welcome-file>index.html</welcome-file>
  22.     </welcome-file-list>
  23. </web-app>
struts2的配置文件struts.xml可能如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4.     "">

  5. <struts>
  6.     <constant name="struts.devMode" value="true" />
  7.     <constant name="struts.action.extension" value="do,action" />
  8.     <constant name="struts.i18n.encoding" value="UTF-8" />

  9.     <package name="aboutlogin" extends="struts-default">
  10.        
  11.         <action name="login" class="loginAction" method="CheckUser">
  12.             <result name="success">/WEB-INF/pages/Home.jsp</result>
  13.             <result name="input">/WEB-INF/pages/login.jsp</result>
  14.             <result name="failed">/WEB-INF/pages/login.jsp</result>
  15.         </action>
  16.       
  17.     </package>

  18.     <include file="struts-information.xml" />
  19.  
  20. </struts>


阅读(1145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~