zoukankan      html  css  js  c++  java
  • Spring+Struts集成(第二种方案)

    在上一篇文章中我们了解到了第一种SpringStruts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入的方式来进行.通过Spring提供ActionProxy进行代理.去获取BeanFactory,找到Path的名称,然后找到path路径下的Action,然后完成注入.

              方案二的核心:Struts的核心交给Spring来创建.Spring跟其他框架集合主要也是通过此种方式.

     

        方案二集成框架图:

    计算机生成了可选文字:Web客户端气/request了fo伪VsrdACtionseFVlet\缨eISp}D1spatch将Struts的Action交给Spring创建,这样业务逻辑对象将会被注入,这样就避免了依赖查找:代理Action的作用:取得BeanFactory,然后到南C容器中将本次请求对应的Action取出印一「U一SActionProXyACtionSpringModel

     

     

    spring+struts(第二种方案)

        集成原理:将业务逻辑对象(Struts的Action)交给Spring进行创建.创建之后业务逻辑对象就会被注入.这样就不会有依赖查找.

     

    1 spring 和struts依赖包配置.

    *struts

    --拷贝struts相关java包和jstl.

    --在web.xml中配置ActionServlet.

    --提供struts-config.xml核心配置文件.

    --提供struts国际化资源文件,最好提供默认国际化文件.

    *spring

    --拷贝spring相关java包

    *SPRING_HOME/dist/spring.jar

    *SPRING_HOME/lib/log4j/log4j-1.2.14.jar

    *SPRING_HOME/lib/jakarta-commons/commons-logging.jar

    *SPRING_HOME/lib/aspectj/aspectjrt.jar

    *SPRING_HOME/lib/aspectj/aspectjweaver.jar

    --提供spring配置文件.


    2 在web.xml文件中配置ContextLoaderListener,让WebServer启动的时候将BeanFactory放在ServletContext中

    代码如下:

     

    1. <!-- 找到文件名 -->  
    2. <context-param>  
    3.     <!-- 此处的名字是固定死的,在ContextLoader里中的一个常量 -->  
    4.     <param-name>contextConfigLocation</param-name>  
    5.     <param-value>classpath:applicationContext-*.xml</param-value>  
    6. </context-param>  
    7. <!-- 设置Listener,一次性创建BeanFactory -->  
    8. <listener>  
    9.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    10. </listener>  


     


    3 struts-config.xml文件中的<action>标签的type属性需要更改为Spring的代理Action类:org.springframework.web.struts.DelegatingActionProxy

      代理Action的作用:取得BeanFactory,然后在IoC容器中将本次请求的Action取出来,随后依赖对象会被注入.


    4 将Action交给Spring创建,必须配置业务逻辑对象,注入给Action

     

    1. <bean  
    2.        name="/login"  
    3.        class="com.tgb.struts.usermgr.web.actions.LoginAction"  scope="prototype">  
    4.        <property name="userManager" ref="userManager"</property>  
    5.    </bean>  


     

         在配置业务逻辑对象的时候需要注意一下细节:

        1 必须使用name属性,而且name属性的值必须和struts-config.xml文件中的action标签的path属性值一致.

        2 建议将scope="prototype"这样struts的Action是线程安全的.

     总结:

       以上便是Spring跟Struts集成方案2 ,通过两种方案进行对比可以看到.第二种方案将BeanFactory纳入Spring管理,这样WEB层就不需要去主动查找对象,而是通过Spring的依赖注入获得对象.

  • 相关阅读:
    Android
    列出控制原理来解决
    【ORACLE】spfile失落的处理
    Cocos2d-x 脚本语言Lua基本语法
    远东转载这说明一些有实力的话人工智能协会的思维和潜意识之间移动的一篇文章
    日志框架的实时变化,即日起,思维详细框架(4)
    [Python] Scatter Plot for daily return
    [Python] Use a Python Generator to Crawl the Star Wars API
    [Poi] Setup PostCSS and Tailwind with Poi
    [Poi] Build and Analyze Your JavaScript Bundles with Poi
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/3934521.html
Copyright © 2011-2022 走看看