`

《Spring in Action》笔记(三)--集成Struts(转载)

阅读更多
第十章. 使用其他 Web 框架

  41. Spring 提供了两种与 Struts 集成的方式

  1) 让你的 Action 继承 org.springframework.web.struts.ActionSupport

  2) 将请求委托给作为 Spring Bean 管理的 Struts action 来自理(P312)

  42. 为了让 Struts 能访问 Spring 管理的 Bean,必须在 struts-config.xml 中注册一个知道 Spring 上下文的 ContextLoaderPlugIn,用的是 WebApplicationContext:(P312)

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> 
  <set-propertyset-property="contextConfigLocation" value="/WEB-INF/training-servlet.xml,/WEB-INF/..."/> 
</plugin-in> 
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property="contextConfigLocation" value="/WEB-INF/training-servlet.xml,/WEB-INF/..."/>
</plugin-in>

  43. ActionSupport 重载了 setServlet()方法,获取bean的方式为调用 ActionSupport 的 getWebApplicationContext().getBean() (P313)

  44. 继承 Spring 提供的 ActionSupport 让 Struts与Spring 紧密耦合,而且 Action 还负责查找 Bean,这也违背了IoC原则(P313)

  45. 使用委托 Action:struts-config.xml 中每个 path 都指定 type 为 org.springframework.web.struts.DelegatingActionProxy,实际的 Action 实例由Spring 来管理,即所有的 Action 实例是配置在 Spring 上下文文件中,它们之间用 path<->name 来映射,这种方式并不好看(P315)

46. 使用请求委托,只在 struts-config.xml 中配置 DelegatingRequestProcess 或 DelegatingTilesRequestProcessor 作为控制器,其余配置不变,如<action path="/listCourses" type="com.unmi.MyCoursesAction"/> 其实 type 属性是被所配置的 controller 忽略掉了,所以可省去 type属性,真正的Action也是由Spring来配置装配,也是通过 path--name 来对应。这种做法就是不需要为每一个 <action .../> 指定 org.springframework.web.struts.DelegatingActionProxy。(P315)

  47. 感觉 Spring 与 Struts 的搭配总有些牵强,没有一种更完美的方式。个人觉得使用请求委托更合适些,一方面是不需要让 Struts 与 Spring 紧密耦合,其次是不需要为每一个 <action .../> 配置一个重复的 DelegatingActionProxy。

  48. Spring 集成 Tapestry 的关键用一个知晓 Spring 的引擎替换掉 Tapestry 的缺省引擎。Spring 未提供这个东西,要自己实现,继承自 org.apache.tapestry.engine.BaseEngine,在引擎的 setupForRequest() 方法中,把 Spring 上下文放到 getGlobal() 对象中 让 Tapestry 随时可用。最后用 engine-class 把这个引擎指定给 Tapestry 应用。(P316)

  49. Spring 在集成 Struts/Tapestyr/JSF/WebWork 都需要在 web.xml 中配置ContextLoaderListener。会对 JSF 有一个独立的项目 JSF-Spring(http://jsfspring.sourceforget.net)。集成 WebWork 1,要在 webwork.properties 中配置属性

  webwork.action.factory=webwork.action.factory.SpringActionFactory。集成 WebWork 2 也有一个 XWork/Spring 集成包(http://www.ryandaigle.com/pebble/images/webwork2-spring.jar),在 xwork.xml 中的 <package .../> 中配置属性

externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver",再加一个拦截器

  class="xwork.interceptor.ExtenalReferenceInterceptor"。---这些真要用到时再细究吧 (P325)

  50. HibernateDaoSupport 有 getSession() 和closeSessionIfNecessary(),可取得Session作更自由的操作

  51. DaoSupport有以下实现类:CciDaoSupport, HibernateDaoSupport, JdbcDaoSupport, JdoDaoSupport, PersistenceBrokerDaoSupport, SqlMapClientDaoSupport, SqlMapDaoSupport, TopLinkDaoSupport,据此了解支持哪些类型DB操作

  第五章. 事物管理

  52. 要用声明式事物,需要用到 TransactionProxyFactoryBean 来包括你的 Service(用 proxyInterfaces 属性指定接口) 类。(P163)

  53. 能够简单配置被代理的Service的 transactionAttributes 属性声明事物,如下对方法名称为addStudent(可能是多个重载方法)启用事物<property name="transactionAttributes"> 

  <props> 
    <prop key="addStudent"> 
      PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT 
    </prop> 
  </props> 
</property> 
<property name="transactionAttributes">
  <props>
    <prop key="addStudent">
      PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT
    </prop>
  </props>
</property>

  如果没为某个 service 方法配置事物,它是能自动提交的。

54. 配置属性 transactionAttributeSource为 MatchAlwaysTransactionAttributeSource 实例,将使 TransactionProxyFactoryBean 的目标类代理的方法都被执行在一个事务环境中了,默认为 PROGAGATION_REQUIRED,ISOLATION_DEFAULT(P168)

  55. 可配置 DefaultTransactionAttribute 给 MatchAlwaysTransactionAtributeSoure 的 transactionAttribute 属性,改变 MatchAlwaysTransactionAtributeSoure 的默认事物属性(P169)

  56. 使用 NameMatchTransactionAttributeSource 可能实现像在 CMT 中那样的事物属性配置。可设定事物回滚规则:默认情况下,发生 Runtime 异常回滚;发生checked exception 不回滚(这也是EJB的行为),可定制,用正(+)或负(+)号写在异常类名前,正异常表示事务仍可提交,负异常表示触发回滚(P170)

  57. NameMatchTransactionAttributeSource 应该能想像到,支持方法名的通配符形式,如 key="get*",应用到所有以get开始的方法(P172)

  58. NameMatchTransactionAttributeSource 的简洁配置,直接配置给 TransactionProxyFactoryBean 的 transactionProperties 属性,形式如它的 properties 属性配置,内部实现是会帮你构造 NameMatchTransactionAttributeSource 实例。在 Spring 1.2.8 中的 TransactionProxyFactoryBean 都没有 transactionProperties 属性,不知哪个版本的有(P173)

  59. 可以用元数据来书写事物属性,JDK1.5 版以下需借助于 Jakarta Commons Attributes,而且还需要结合 ANT 预编译,麻烦,如果是JDK1.5以上就方便多了。要使用到 AttributesTransactionAttributeSource(P174)

  60. 使用 Bean 继承可以在父 bean (TransactionProxyFactoryBean)中定义公共的东西,如 transactionManager,transactionAttributeSource 等,子 bean 中只需要定义自己的 target 属性,这样做可以省却很多 XML 配置。注意父 Bean 当抽象类使用,不需要用到它的实例,所以设置 lazy-init="true" 告诉容器不要初始化它

分享到:
评论

相关推荐

    MLDN_J2EE框架_笔记--精华---(包括jsp struts hibernate spring).rar

    核心组件包括ActionForm、Action、ActionServlet和配置文件struts-config.xml。此外,Struts还支持国际化、数据验证和异常处理。 3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用程序...

    J2EE三大框架_笔记_a

    10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记 J2EE框架_笔记_b: 11-留言管理程序_使用Struts + DAO完成笔记 12-Struts + DAO分页笔记 16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 ...

    J2EE框架_笔记_b

    10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记 J2EE框架_笔记_b: 11-留言管理程序_使用Struts + DAO完成笔记 12-Struts + DAO分页笔记 16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 ...

    J2EE框架_笔记_c

    10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记 J2EE框架_笔记_b: 11-留言管理程序_使用Struts + DAO完成笔记 12-Struts + DAO分页笔记 16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 ...

    记录-笔记-用ANT构建-struts-spring-hibernate

    标题 "记录-笔记-用ANT构建-struts-spring-hibernate" 暗示了这篇笔记主要涉及使用Apache Ant工具来构建一个整合了Struts、Spring和Hibernate的Java Web项目。Struts是MVC(模型-视图-控制器)框架,Spring是全面的...

    SSH笔记-Spring整合Struts2

    通过`&lt;action&gt;`标签的`class`属性设置为`org.springframework.web.struts2.SpringAction`,然后使用`spring bean`属性引用Spring配置中的Bean ID。 4. **Spring插件**:在Struts2的配置中,添加Spring插件配置,以...

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    struts.action.extension The URL extension to use to determine if the request is meant for a Struts action 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀,例如login....

    SSH笔记-整合Spring2、Struts2、Hibernate4

    6. **整合Struts2和Spring**:使用Spring插件struts-plugin.xml将Action注入Spring容器,实现依赖注入。 7. **整合Hibernate和Spring**:通过SessionFactoryBean在Spring中创建SessionFactory,配置数据源,使用...

    Struts+spring+hibernate学习笔记! - Struts原理与实践 - JavaEye知识库.files

    当 Struts、Spring 和 Hibernate 结合在一起时,通常称为 SSH(Struts-Spring-Hibernate)整合框架。Spring 作为整体的协调者,可以管理 Struts 的 Action 对象以及 Hibernate 的 SessionFactory 和 Session。Struts...

    SSH(Struts1.0+Spring+Hibernate)框架集成笔记

    ### SSH(Struts1.0+Spring+Hibernate)框架集成笔记 #### 一、概述 SSH框架集成,即Struts1.0 + Spring + Hibernate框架的整合应用,是Java Web开发中较为复杂的集成模式之一。它集合了MVC设计模式(通过Struts...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    SSH是Java开发中广泛使用的三大框架——Struts2、Hibernate和Spring的缩写。这三大框架结合使用,能够构建高效、灵活的企业级Web应用程序。现在,让我们深入探讨这些框架的知识点。 **Struts2笔记** Struts2是MVC...

    javaEE框架笔记,识货人下

    10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记.pdf 11-留言管理程序_使用Struts + DAO完成笔记.pdf 12-Struts + DAO分页笔记.pdf 13-Hibernate入门(上)笔记.pdf 14-Hibernate入门(下)笔记.pdf ...

    spring+struts集成学习笔记和项目源码

    在提供的"spring+struts集成学习笔记和项目源码"中,你将有机会深入理解这些概念,通过实际操作来学习如何将Spring的优秀特性与Struts的高效处理机制结合起来,构建出高效稳定的Web应用。源码分析和实践操作是加深...

    spring-note spring 读书笔记

    这份"spring-note spring 读书笔记"深入探讨了Spring的核心概念以及如何与其他流行技术如JDBC、Hibernate、Struts和事务管理进行集成。 1. **Spring依赖注入(IOC)**: Spring的IOC容器是其核心,负责创建对象并...

    struts2综合笔记

    - 在 `web.xml` 中添加 Struts2 核心过滤器配置,参考 `struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2-blank\WEB-INF\web.xml`。 #### 四、Struts2 目录结构 - **apps**: 包含基于 Struts2 的示例应用。 - *...

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    3. ActionServlet 依据配置文件 `struts-config.xml` 决定请求应该转发给哪个 Action 对象处理。 4. Action 对象执行相应的业务逻辑,并返回结果。 5. 结果被 ActionServlet 重定向或转发给指定的视图(通常是 JSP ...

    Spring的学习笔记

    - **Struts2,Hibernate,Spring**:SSH是Java企业级开发的常用组合,涉及各框架的jar包集成,配置文件调整,以及Action、Service层的整合。 **DTO和VO** - **DTO(Data Transfer Object)**:用于在不同层之间...

    张龙圣思园struts2学习笔记word

    Struts2还与其他流行的技术如Spring、Hibernate等有良好的集成,可以方便地构建完整的Java EE应用。例如,通过Struts2-Spring-plugin,可以实现Action的依赖注入,增强应用的可测试性和可维护性。 总的来说,张龙...

    Spring_Struts、Hibernate支持笔记

    在Java Web开发领域,Spring、Struts和Hibernate是三个非常重要的框架,它们共同构建了经典的SSH(Spring、Struts、Hibernate)架构。这个架构允许开发者创建高效、模块化的Web应用程序。本篇笔记将探讨Spring如何...

    struts2.21 spring hibernate 整合笔记

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面发挥着重要作用。Struts2作为MVC(模型-视图-控制器)框架,负责处理请求和控制应用程序流程;Spring则是一个全面的后端框架,...

Global site tag (gtag.js) - Google Analytics