zoukankan      html  css  js  c++  java
  • Struts2+Spring集成合并

    前边单独总结了Struts2SpringIbaits框架了,那么怎么结合使用呢?这次先来看一下Sturts2Spring的集成合并。其实挺简单的,就是导入各自的jar包以及连接彼此的jar包,分好彼此的工作就可以了。

     好看一下Struts2+Spring的集成方案!

       Struts2Spring集成有两种方案,是根据action的创建来划分的!

       方案一,Struts2负责流程,Spring负责对象的创建;ActionStruts2框架负责创建;ServiceSpring框架负责创建。看一下其实现的一个例子的步骤:

      

      1,集成Struts2框架到项目中,搭建Struts2框架环境,这个可以看我们的Struts2()——总体介绍,步骤和那个是一样的。

      2,集成Spring框架到项目中,搭建Spring框架环境,这里也可以看一下Spring()——总体介绍。但是这里我想说一下,导入我们的jar包,和拷贝好两个配置文件后,为了是我们项目在加载时就初始化解析applicationContext.xml,并创建相应的各种对象。

    我们在web.xml中可以添加框架的监听器:

        <!-- 用于指定Spring的配置文件路径 -->  
        <context-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:applicationContext.xml</param-value>  
        </context-param>  
       
        <!-- 服务器启动时,通过监听器初始化Spring的配置环境   
            监听器,默认加载文件是:/WEB-INF/applicationContext.xml  
        -->  
        <listener>  
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
        </listener>

      3,这样两者的各自环境就算搭建好了,那么如何进行两者的集成合并呢?这里Struts2为我们提供了jar:struts2-spring-plugin-2.1.8.1.jar。我们需要将此jar包也引用到项目中。这样两个框架就可以通过此jar包进行合并集成了。

       简单说一下这个jar包的作用吧:插件中提供了新的工厂类,覆盖了Struts2的原工厂类。新工厂类的工作原理:首先根据Action的完整类名,到Spring配置文件中查询bean标签的id是否存在一致的名称。如果有一致的说明,Action对象是由Spring负责创建,并有Spring进行装配组合对象之间的关系。        如果查找不到,会进行特殊的处理操作,再由Strtus2框架进行反射创建Action对象,并采用Strust2框架的自动装配功能来完成ActionService对象的关联。默认是根据name进行查找的,当然我们也可以进行修改,例如改成以type类型进行查找的方式:

      <constantname="struts.objectFactory.spring.autoWire"value="type"></constant>

      4,这样环境就算搭建好了,看看我们各个配置文件中的代码吧,重点看注释:

     

      a,web.xml中配置了两个框架的核心配置文件:

    <span style="font-size:18px;">  <?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>classpath:applicationContext.xml</param-value>  
            </context-param>  
           
            <!-- 服务器启动时,通过监听器初始化Spring的配置环境   
                监听器,默认加载文件是:/WEB-INF/applicationContext.xml  
            -->  
            <listener>  
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
            </listener>  
               
            <!-- 配置Struts2框架的核心调度器 -->  
            <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>  
           
            <!-- 默认主界面 -->  
            <welcome-file-list>  
                <welcome-file>login.jsp</welcome-file>  
            </welcome-file-list>  
        </web-app>  
    </span>  

      b,struts2.xml,配置了action类:

    <struts>  
            <!-- 指定以name的方式组合action和service的关系 -->  
            <constant name="struts.objectFactory.spring.autoWire" value="name"></constant>  
              
            <!-- 设置action的信息 -->  
            <package name="example" namespace="/user" extends="struts-default">  
                <action name="login" class="com.ljh.action.LoginAction" method="login">  
                    <result name="success" type="redirect">/success.jsp</result>  
                    <result name="login" type="redirect">/login.jsp</result>  
                </action>     
            </package> 
    </struts> </span>


      c,applicationContext.xml中配置了service类:

    <!-- service类的基本信息 -->  
      
    <bean id="userService" class="com.ljh.service.UserService" >
    </
    bean>
     

      对于actionservicejsp的代码较简单登录的功能,很容易实现的。其实看完了,感觉这种集成合并的方式Struts2Spring都是各自干各自的,集成的不是很好。因为Sping是容器么,对对象的管理更为专业,Struts2对流程的控制更加专业。所以这种方式很少使用,不推荐。看我们的第二种集成方式,也是常用的集成方式。

      方案二,Struts2负责流程,Spring负责对象的创建,ActionService都由Spring框架负责创建。这是常用的集成合并方案。步骤和上边的基本上一样,都是导入响应的jar包,拷入响应的配置文件,web.xml文件的写法也一样。主要看一下两个框架核心配置文件的和第一种方案的写法区别:

      1struts2.xml的写法:

    <struts>  
        <!--写法基本一样但是注意class的值,这里没有写真正路径,为了是在Spring中根据此值进行查找-->  
        <package name="example" namespace="/user" extends="struts-default">  
            <action name="login" class="loginAction" method="login">  
                <result name="success" type="redirect">/success.jsp</result>  
                <result name="login" type="redirect">/login.jsp</result>  
            </action>  
        </package>          
    </struts>  
     

      2applicatinContext.xml的写法:

    <!--这里的id对应上边的class,这里的class才是真正的路径,采用了Spring的根据name自动装配的功能,当然也可以我们手动指定,这里需要注意的是,action需要多例创建,而Spring默认为单例创建的,所以需要制定scope="prototype"-->  
        <bean id="loginAction" class="com.ljh.action.LoginAction" autowire="byName" scope="prototype">
      </
    bean> <bean id="userService" class="com.ljh.service.UserService" >
      </
    bean>

      这样就实现了二者的合并了,主要是将action交给Spring创建,并组合彼此的关系了,是彼此框架只干自己的事,分工明确,提高效率。

       综上,为Struts2Spring的简单合并总结,例子较为简单,还需要在实践中体会,灵活应用框架才会是我们的开发变的更为高效,更为简单。通过编程,通过框架仔细琢磨其中的魅力,用心钻研,才会有更大的收获。

  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4746449.html
Copyright © 2011-2022 走看看