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 条评论
登录 后参与评论

相关文章

来自专栏别先生

java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

1、java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息。

1222
来自专栏Java Edge

@ConfigurationProperties

1916
来自专栏代码拾遗

Spring Boot 2.0 教程 - 配置详解

Spring Boot 可以通过properties文件,YAML文件,环境变量和命令行参数进行配置。属性值可以通过,@Value注解,Environment...

873
来自专栏Jerry的SAP技术分享

MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

如果您是基于Maven进行依赖管理的Java项目,只需要在您的pom.xml里加入下面的依赖定义,

772
来自专栏张泽旭的专栏

基于spring boot sftp文件上传

对sftp文件上传将行封装,实现连接的单例模式,完成线程安全的改进,sftp文件上传下载失败的重试。

631
来自专栏陈树义

玩转 SSH(七):使用 dubbo + zookeeper 实现服务模块化

一、创建 SSMVCAnnoDemo 项目 点击菜单,选择“File -> New Project” 创建新项目。选择使用 archetype 中的 maven...

3594
来自专栏salesforce零基础学习

salesforce 零基础学习(三十四)动态的Custom Label

custom label在项目中经常用到,常用在apex class或者VF里面用来显示help text或者error message。有的时候我们需要用到的...

1815
来自专栏菩提树下的杨过

spring-自动加载配置文件\使用属性文件注入

在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 ? src/main/resources 这个source folder 放置we...

2017
来自专栏dalaoyang

SpringBoot统一处理异常

1604
来自专栏java 成神之路

Spring mvc 启动配置文件加载两遍问题

3786

扫码关注云+社区