spring整合struts2

spring 与struts2整合,由于struts是一个web框架,所以需要在项目中加入spring与web相关的包。其次,在web中应用spring时应该在web应用加载时就创建IOC容器(ApplicationContext),所以在web应用初始化时就创建。spring框架在web应用的ServlteContextListener的init方法中获取了Ioc容器,并将其放入ServletContext(即application)对象中,我们在使用时只需要从application中取出来就可以了。spring提供了 WebApplicationContextUtils.getWebApplicationContext(application) 方法取出ioc容器(ApplicationContext)。

所以分为以下步骤:

  1. 配置
  2. 取出Ioc容器

web.xml文件的配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

 <!-- 配置 Spring 配置文件的名称和位置 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
 </context-param>
 
 <!-- 启动 IOC 容器的 ServletContextListener -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <!-- 以上配置在非web应用中无需配置 -->
 
 <!-- 配置 Struts2 的 Filter -->
 <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

获取Ioc容器并使用:

  ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(application);
  
  Person person = ctx.getBean(Person.class);
  
  person.hello();

其次,在spring配置文件中配置struts的action时,需要指定其scope属性为proptype(非单例的)

<?xml version="1.0" encoding="UTF-8"?>
<beans
 xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

 <bean id="person" class="com.yawn.bean.Person">
  <property name="name" value="yawn"></property>
 </bean>
 
 <bean id="personService" class="com.yawn.service.PersonService"></bean>
 
 <!-- acion 对应的bean必须为非单例的 -->
 <bean id="personAction" class="com.yawn.action.PersonAction" scope="prototype">
  <property name="personService" ref="personService"></property>
 </bean>

</beans>

最后,在struts配置文件中使用action时,就可以直接用bean的id来引用了

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
 <package name="default" namespace="/" extends="struts-default">

  <action name="personAction" class="personAction">
   <result>/success.jsp</result>
  </action>
  
 </package>
</struts>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【专业领域】Android图片缓存之内存缓存

在过去的两篇博客已经讲了图片的基本知识和图片的加载方法及优化所有的这些优化都是为了避免应用出现OOM这个问题。一个好的应用程序不仅要健壮不能出错还要方便用户使用...

33610
来自专栏SHERlocked93的前端小站

Node中的事件循环和异步API

单线程编程会因阻塞I/O导致硬件资源得不到更优的使用。多线程编程也因为编程中的死锁、状态同步等问题让开发人员头痛。 Node在两者之间给出了它的解决方案:利用单...

1463
来自专栏企鹅号快讯

每日一学之socket编程(三)

图片来自于百度图片 NIO的新特性Buffer 前两期我们主要讲述了关于socket连接的问题,这期我们主要说说数据的问题。 自JDK1.4开始,Java提出了...

1769
来自专栏黑泽君的专栏

day50_BOS项目_02

我们再补上IUserDao和UserDaoImpl的示例代码: IUserDao.java

692
来自专栏非著名程序员

Android 使用 ApachePOI 组件读写 Word doc 和 docx 文件

最近在项目中要生成Word的doc和docx文件,一番百度google之后,发现通过java语言实现的主流是Apache的POI组件。除了POI,这里还有另一种...

66710
来自专栏大内老A

框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?

所谓类型转移(Type Forwarding)就是将定义在某个程序集中的类型转移到另一个程序集中。我们先通过一个简单的实例让读者朋友们对类型转移有一个感官上的认...

1846
来自专栏程序员互动联盟

【专业技术】 Android图片缓存之内存缓存

上面两篇博客已经讲了图片的基本知识和图片的加载方法及优化,所有的这些优化都是为了避免应用出现OOM这个问题。一个好的应用程序不仅要健壮不能出错还要方便用户使用,...

3575
来自专栏流柯技术学院

JMeter专题系列(三)元件的作用域与执行顺序

JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效...

1144
来自专栏向治洪

JSBridge深度剖析

概述 做过混合开发的人都知道Ionic和PhoneGap之类的框架,这些框架在web基础上包装一层Native,然后通过Bridge技术的js调用本地的库。 在...

2705
来自专栏架构师之旅

【Java SE】Java NIO系列教程(十) DatagramChannel

Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数...

1835

扫码关注云+社区