Struts2与Spring的整合,对于程序员很有利,他能使程序更加简单,分层明细。下面小编和大家分享Struts2使用Spring插件完成整合。
借助于Spring插件,我们可以非常简单地完成Spring和Struts2的整合,这种整合包括让Action自动装配Spring容器中的Bean,以及让Spring管理应用中的Action两种方式,不管采用哪种方式,完成Struts2和Spring的整合都是非常简单的,而且差别不大.
整合spring前的准备工作
为了在Web应用中使用Spring框架,当然需要将Spring框架的JAR文件复制到Web应用的WEB-INF\lib\路径下,通常建议复制dest路径下的spring.jar文件,这个文件是spring框架最全面的类库,使用该文件比使用分模块的类库更加简单.此外,spring框架还依赖于commons-logging.jar文件,因此还需要将该文件复制到Web应用的WEB-INF\lib\路径下,为了完成spring和Struts2的整合,还必须安装Struts2的Spring插件,只需要将Struts2-spring-plugin-XXX.jar文件复制到Web应用的WEB-INF\lib\路径下,一旦在Web应用中安装了Spring插件,即可充分利用该
插件提供的功能:
1,可以通过Spring来创建所有的Action,Interceptor和Result.
2,可以在Struts创建了某个对象(Action实例)之后,Spring将其依赖的组件自动注入该对象
3,提供了两个拦截器来完成自动装配.
此外,在使用Spring容器之前,必须先完成Spring容器的初始化,为了完成Spring容器的初始化,Struts2利用了Spring所提供的两种初始化方
式.
1,利用ContextLoaderListener
Spring提供一个ContextLoaderListener对象,该类可以作为Web应用的Listener使用,它会在Web应用启动时自动查找WEB-INF/下的applicationContext.xml配置文件(Spring的配置文件),并且根据该文件来创建Spring容器.因此,如果Web应用中只有一个Spring配置文件,并且文件名为"applicationContext.xml",并将该文件放在Web应用的WEB-INF/路径下,则只需在web.xml文件中增加如下一段即可:
<!-- 根据默认配置文件来初始化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
如果有多个配置文件需要载入,则应该使用<context-param>元素来确定配置文件的文件名.如下面的web.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 定义spring 配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml,
/WEB-INF/classes/conf/spring/applicationContext-*.xml
</param-value>
</context-param>
<!-- 根据默认配置文件来初始化Spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
如果没有contextConfigLocation制定配置文件,Spring会自动查找WEB-INF目录下的applicationContext.xml配置文件.
2,采用load-on-startup Servlet创建ApplicationContext
利用Listener创建Spring容器很简单,但有一个明显的局限,因为Listener是Servlet2.3以后才开始出现的规范,这意味着在低版本的Servlet中只能利用Web应用中的load-on-startup的Servlet而不能利用Listener.这两者的作用是一样的.为了使用load-on-startup Servlet来创建Spring容器,Spring提供了一个特殊的Servlet类:ContextLoaderServlet,该Servlet在初始化时,会自动查找WEB-INF/下的"applicationContext.xml"文件,如果只有一个配置文件,并且名为"applicationContext.xml",则在web.xml文件中的配置如下:
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
该servlet仅用于提供后台服务,负责创建spring容器,无需响应客户端请求,因此无需配置servlet mapping.
如果有多个配置文件,则一样使用<context-param>元素来确定多个配置文件,事实上,无论是ContextLoaderServlet还是ContextLoaderListener都是通过调用ContextLoader来创建spring容器的,如果Web应用中包含了多个spring配置文件,则在web.xml中的配置如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/applicationContext-resources.xml
/WEB-INF/classes/applicationContext.xml
/WEB-INF/config/applicationContext-*.xml
</param-value>
</context-param>
在Servlet规范中Listener总是比Servlet优先加载的,因此,采用ContextLoaderListener更好.
为了让控制器Action访问Spring的业务逻辑组件,有两种策略:
1,Spring管理控制器,并利用依赖注入为控制器注入业务逻辑组件
2,控制器定位Spring工厂,也就是Spring的容器,从Spring容器中取得所需的业务逻辑组件.
对于这两种方式,Struts2都提供了对应的整合实现.
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20100719/460514.html
分享到:
相关推荐
《Spring加载RESTful服务详解及源码分析》 在当今的Web开发中,RESTful API已经成为构建可扩展、易于维护的系统的重要组成部分。Spring框架,作为Java生态系统中的中流砥柱,提供了强大的支持来实现RESTful服务。本...
Spring提供两种代理模式:JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的目标类,而CGLIB代理则针对未实现接口的类。默认情况下,Spring会尝试使用JDK代理,如果目标类没有接口,就会自动切换到CGLIB。也可以...
首先,Spring 提供了两种选择来加载 ApplicationContext:ContextLoaderListener 和 ContextLoaderServlet。这两者在功能上完全等同,只是一个是基于 Servlet2.3 版本中新引入的 Listener 接口实现,而另一个基于 ...
Spring提供了两种主要的容器:DefaultListableBeanFactory和ApplicationContext。前者是最基础的bean工厂,而ApplicationContext不仅包含了BeanFactory的功能,还添加了资源加载、消息解析、事件发布等功能,更适合...
这两种方式都可以用来初始化静态变量。例如,我们可以在`@PostConstruct`方法或者`run`方法中获取bean并赋值给静态变量。 ```java @Component public class InitializationBean { @Autowired private MyBean ...
除了这两种方式,Spring Boot引入了更强大的`ConfigDataLocationResolver`和`ConfigDataLoader`接口,它们允许我们自定义配置数据的加载逻辑,支持更丰富的数据源,如Git、HTTP等。 在实际应用中,我们可能还需要...
第三种方式是全权委托的方式,即完全将控制权交给Spring框架,让Spring来负责所有的控制逻辑,而Struts仅作为一个简单的视图层。这种方式下,我们可以将所有的业务逻辑都放在Spring管理的Bean中,而Struts仅仅用于...
它可以通过以下两种常见实现类来加载多个配置文件: - `ClassPathXmlApplicationContext`:从类路径(CLASSPATH)中加载配置文件。 - `FileSystemXmlApplicationContext`:从文件系统的当前路径加载配置文件。 ...
总结,Spring AOP 是一个强大的工具,可以帮助开发者更好地管理横切关注点,通过代理和注解两种方式实现,使得代码更加整洁、易于维护。理解并熟练掌握AOP,对于提升开发效率和代码质量具有重要意义。
首先,Spring框架提供了两种主要的配置方式:XML配置和Java配置。XML配置是最传统的形式,通过`<beans>`标签定义bean及其属性。而Java配置则是通过注解和配置类来完成,这种方式更加简洁且类型安全。 XML配置文件...
2) 使用SPRING BOOT Conditional机制实现了两种产品按需加载,工程会根据配置文件开关动态加载 3) 实现了普通队列消息发送与监听,实现了基于TOPIC的消息发布与订阅 4) IBM-MQ无需提前创建主题,TongLink需要提前...
Spring加载properties文件的两种方式实例详解 在项目中,如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动...
以下将详细阐述Spring与Struts整合的三种方式: 1. **使用Spring的ActionSupport** 这种方式是通过让Struts的Action类继承Spring的`ActionSupport`类,使Action类能够访问Spring的ApplicationContext。首先,在`...
为了解决这个问题,Spring提供了两种主要解决方案: 1. **Open Session in View Interceptor (OSIV)**:这是Spring MVC中的一个拦截器,它的作用是在整个视图渲染过程中保持Hibernate Session的开放,确保在需要的...
无论哪种方式,它们都充分利用了Spring的IoC(控制反转)和DI(依赖注入)特性,使得代码更易于测试和维护。XFire作为一个早期的SOAP框架,虽然现在已被Apache CXF所取代,但理解这种集成方式对于理解现代Web服务...
通过上述两种方式,可以实现DWR与Spring的有效集成,从而发挥两者的优点,提高系统的可维护性和扩展性。选择合适的方式取决于项目的具体需求和技术团队的习惯。对于已经熟悉Spring框架的开发者来说,第一种方式可能...
Spring加载XSD文件发生错误的解决方法 在使用 Spring 框架时,可能会遇到加载 XSD 文件发生错误的问题,本文将对此问题进行详细的分析和解决。 问题描述 在使用 Spring 框架时,可能会出现 org.xml.sax....
DispatcherServlet 的配置有两种主要方式:XML 和 JavaConfig。 在 JavaConfig 方式下,这个配置过程依赖于Servlet 3.0 规范中的 ServletContainerInitializer (SC) 接口。当应用在支持Servlet 3.0 的容器(如...
除了上述两种方式外,还有其他方式可以控制 2 个 bean 的初始化顺序。例如,可以使用 Spring 的 @Order 注解来指定 bean 的初始化顺序,也可以使用 Spring 的生命周期接口(如 InitializingBean)来控制 bean 的初始...