Struts2集成Spring

转载请注明出处:jiq?钦‘s
technical Blog

1 集成Struts:

给web工程集成Struts2比较简单,下载struts2,将所需的jar文件add进去,然后配置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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>zk_regcenter</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>

  <!-- 请求处理者配置  -->
  <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>

然后新建struts.xml文件,配置Action即可:

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

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <package name="default" namespace="/" extends="struts-default,json-default">

    	<action name="Login" class="org.zk.action.LoginAction">
            <result name="success">/index.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

        <!-- 配置管理Action -->
        <action name="InitTreeData" class="org.zk.action.ConfigManageAction" method="InitTreeData">
            <result name="success" type="json">
            	<param name="root">initTreeData</param>
            </result>
        </action>

        <action name="InitTreeChildrenData" class="org.zk.action.ConfigManageAction" method="InitTreeChildrenData">
            <result name="success" type="json">
            	<param name="root">initTreeChildData</param>
            </result>
        </action>

        <action name="DispNodeInfo" class="org.zk.action.ConfigManageAction" method="DisplayNodeInfo">
            <result name="success" type="json">
            	<param name="root">nodeInfo</param>
            </result>
        </action>

        <action name="SaveNodeInfo" class="org.zk.action.ConfigManageAction" method="SaveNodeInfo">
            <result name="success" type="json">
            	<param name="root">configOpResult</param>
            </result>
        </action>

        <action name="CreateNewNode" class="org.zk.action.ConfigManageAction" method="CreateNewNode">
            <result name="success" type="json">
            	<param name="root">configOpResult</param>
            </result>
        </action>

        <action name="DeleteExistNode" class="org.zk.action.ConfigManageAction" method="DeleteExistNode">
            <result name="success" type="json">
            	<param name="root">configOpResult</param>
            </result>
        </action>

        <!-- 服务管理Action -->
        <action name="InitServiceData" class="org.zk.action.ServiceManageAction" method="InitServiceData">
            <result name="success" type="json">
            	<param name="root">initServiceData</param>
            </result>
        </action>

        <action name="InitServiceIpsData" class="org.zk.action.ServiceManageAction" method="InitServiceIpsData">
            <result name="success" type="json">
            	<param name="root">initServiceIpsData</param>
            </result>
        </action>

        <action name="DisplayServiceInfo" class="org.zk.action.ServiceManageAction" method="DisplayServiceInfo">
            <result name="success" type="json">
            	<param name="root">serviceInfo</param>
            </result>
        </action>
    </package>
</struts>

备注:为什么要引入Spring?

主要是利用面向接口编程的这个思想,结合Spring的IoC容器将业务逻辑解耦。

比如Action中要存储一些业务数据,有时候可能存储在数据库中,有时候可能存储在文件。再比如我最近搞的一个分布式注册中心,配置信息可能就不存储在数据库,而是存储在ZooKeeper集群中,所以需要在action中使用访问ZooKeeper的类,甚至我就算访问ZooKeeper,有时候用原生的ZooKeeper对象访问,有时候用Curator来访问ZooKeeper。我们不可能将所有这些访问数据库,或者ZooKeeper集群的对象都在Action中显示New出来,一旦要换一种方式你该如何,改代码?

所以我们在action中只是定义存储数据的接口对象,调用其接口来进行数据存取,然后再Spring的IoC容器中配置具体的实现了接口的数据存取实现类对象,不管使用哪种方式,只需要在配置Action bean的时候,通过修改配置文件,将具体的实现类利用Spring IoC容器的特性,自动注入到Action中即可。即配置了多种类的bean对象,然后根据需要自由组合。

这就是面向接口编程和Spring IOC容器的魅力所在。

2 集成spring:

集成spring进来也不难,下载spring,将其中除去doc和source之外的jar全部add进去,配置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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>zk_regcenter</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>

  <!-- spring配置 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
  </error-page>

  <!-- 请求处理者配置  -->
  <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>

然后配置applicationContext.xml(记得和web.xml一起放在默认的WEB-INF目录下),将action单例交给spring IOC容器管理:

<?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-2.5.xsd">

	<bean id="ConfigAction" class="org.zk.action.ConfigManageAction" scope="prototype" />
</beans>

注意:关于spring bean中的scope配置

如果scope配置为prototype就表明每次请求Action都会创建一个新的Action实例来响应这个请求,如果要每次请求都共用同一个Action单例来响应请求应该将scope配置为singleton。换句话说如果你希望每次请求action能够保留上一次请求的状态,用singleton,如果希望每次请求action都需要一个新的action,而不想保留上次请求处理的action的状态,就配置为prototype。
单例模式效率高,但是会带来一些线程安全等问题,可能多个客户端请求同一个action实例导致状态不一致等,这个配置成什么模式具体看你的业务。

一般情况下配置为prototype,也有配置为singleton的时候,比如我有一个ZooKeeper连接对象需要注入到多个action中用户访问ZooKeeper,其中只是读写zk集群,不会涉及到有什么信息需要保存,计算是普通应用程序也希望用一个单例模式来获取这个ZooKeeper访问对象,那么这个时候这个zk访问对象就可以配置为singleton,然后注入到action中使用。

然后将之前配置的struts.xml中的action配置中的class属性全部修改为spring Ioc容器中配置的action的bean id即可:

<!-- 配置管理Action -->
        <action name="InitTreeData" class="ConfigAction" method="InitTreeData">
            <result name="success" type="json">
            	<param name="root">initTreeData</param>
            </result>
        </action>

备注:然后启动tomcat服务器,如果启动发现找不到action的异常,是由于没有导入struts2-spring-plugin-2.3.20.jar导致。

时间: 2024-10-14 09:56:59

Struts2集成Spring的相关文章

Spring与Struts2集成开发

Struts2和Spring都是不错的开源框架,Spring与Struts2集成开发,把二者结合在一起使用,开发效果更佳,效率杠杠的.下面介绍一下如何将Spring与Struts2集成在一起开发.分七步战略: 1.添加Struts2 支持jar包 :注意:加上一个Struts-spring-plugin(集成)插件包 2.添加spring 支持jar包 3.编写struts.xml配置文件 注意:Action是交由Spring管理:所以action class属性应和spring 中配置的Act

Struts2和Spring集成

Spring是一个流行的Web框架,它提供易于集成与很多常见的网络任务.所以,问题是,为什么我们需要Spring,当我们有Struts2?Spring是超过一个MVC框架 - 它提供了许多其它好用的东西,这是不是在Struts.例如:依赖注入可以是有用的任何框架.在本章中,我们将通过一个简单的例子来看看如何集成Spring和Struts2一起. 首先,需要添加下列文件到项目的构建路径从Spring安装.您可以下载并安装最新版本的Spring框架从 http://www.springsource.

集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery

网页地址 http://blog.csdn.net/lpy3654321/article/details/31841573 项目设想,在项目开发中,我们的开发者大多数时间都在反复开发 相同的keyword,相同的语法. 但就在这种情况下还会常常发生语法的错误,并且每一个开发者的代码风格不同. 其它人员阅读困难.新人的学习成本也会添加. 这些问题会浪费非常多时间,也会影响到开发者的心情,和程序质量. 由这些问题我想的解决方法是 <代码生成工具> . 代码生成能够解决上述问题,加强约定. 对于普通

struts2与spring集成时,关于class属性及成员bean自动注入的问题

正常来说按照Spring官方配置,在struts2与spring整合时,struts配置文件中class属性指向spring配置的bean id,但是在class指向类路径时,依然能注入service. public class LoginAction extends ActionSupport{ private LoginService loginService; public void setLoginService(LoginService loginService) { System.o

SSH Struts2+hiberante+Spring整合

使用SSH框架编写学生信息: 一.新建Java工程: (1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,service层. (2)建立好各层的实现类及接口; (3)建立一个source folder文件夹,用来存放一些配置问价. (4)改变字节码生成的位置,改为WEB-INF下面的classes文件夹下. Java工程层级结构如下图: 二.hibernate整合到Spring容器中 步骤: 1.编写domain

struts2+hibernate-jpa+Spring+maven 整合(1)

1.0.0 struts2 与 spring 的整合. 1.1.0 新建maven工程 , 编写pom.xml ,这里只需要简单的添加 一个组件就够了: 在myeclipse 生成的pom.xml 添加如下代码: <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.16

Struts2、Spring和Hibernate应用实例(上)

Struts2.Spring和Hibernate应用实例 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用.作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用.功能齐全的标志库(Tag Library).开放源代码.而Spring的出现,在某些方面极大的方面了Struts的开发.同时,Hibernate作为对象持久化的框架,能显示的提高软件开发的效率与生产力.这三种流行框架的整合应用,可以发挥它们各自的优势,使软件开发更加的快速与便

Struts2和Spring MVC的区别

概述: Struts2框架中,Action类是其核心类,XxxAction被称作业务逻辑控制器,实现了对用户请求信息的处理.Struts2框架的引入,使用XxxAction作为控制层,将视图层和模型层相分离,真正实现了MVC开发模式,使得整个工程分成Model(持久层/业务层).View.Controller三层,使得软件耦合度被降低. SpringMVC和Struts2框架的功能相似,也是实现视图层和控制层的分离,使得软件耦合度降低.并且,SpringMVC 是Spring内置的Spring 

struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决

最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myeclipse进行整合的,本来也没那么多问题,看视频吧居然好多要手打,我不喜欢看不下去放弃了,教程把就是一堆坑,最最让人不解的是明明有一个冲突是需要解决的,但我看到的教程居然都没有提到,还有一个错误居然好多人都好像自动忽略一样,能解决我问题的都是要漫长的找,所以我一定一定要把这个过程记录下来,给第一次搞