`
crmjava
  • 浏览: 7476 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

chapter06 SSH整合

阅读更多

chapter06 SSH整合

一、SSH

Struts(表示层)+Spring(业务层)+Hibernate(持久层)

Struts

Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。

MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用JSPHTTPFormTagResourse ControllerActionServletstruts-config.xmlAction

Hibernate

Hibernate是一个持久层框架,它只负责与关系数据库的操作。

Spring

Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。

① Web分层架构中业务层为什么都选择Spring

Service层需要处理业务逻辑和交叉业务逻辑,处理事务,日志,安全等,而这些与SpringIoCAOP等不谋而合。

② Web分层架构中,对于各层技术的采用应该遵循一个怎样的标准?

1、选择发展成熟的技术:

  A、经过了项目实践证实可行性良好

  B、文档完善

  C、技术一直处于可持续发展更新

2Web应用中对于技术的选择有赖于开发人员的技术掌握情况

二、SpringStruts整合

  前提:

    必须在Web应用启动时,创建SpringApplicationContext实例(即加载spring容器)

  方式:

    1、采用ContextLoaderListener来创建ApplicationContext

    <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>

      /WEB-INF/spring-config/applicationContext.xml

    </param-value>

    </context-param>

    <listener>

    <listener-class>

      org.springframework.web.context.ContextLoaderListener

    </listener-class>

</listener>

此时的ApplicationContextWebApplicationContext实例,它回去web容器的根目录去搜索配置文件,所以配置文件要放在WEB-INF下。如果不放在这个下面要借助一个虚拟协议Classpath

    2、采用ContextLoaderPlugIn来创建ApplicationContext

    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

  <set-property  property="contextConfigLocation" value="/WEB-INF/config/sale.xml" />

    </plug-in>

  或者:

通过listener装载spring应用上下文

集成方式:

方式一、通过SpringActionSupport

  ActionSupport类:

  知道ApplicationContext的获得方式(因为ApplicationContext它的引用被获得之后会自动保持到ServletContext中)

  步骤:

  1Action直接继承ActionSupport

  2、使用ApplicationContext ctx = getWebApplicationContext();取得Spring上下文

  3、取得相应Bean

  注意:有可能需要替换commons-attributes-compiler.jar包。

  优点:

    简单

  缺点:

    耦合高

    违反IOC

    无法使用多方法的Action

 

方式二:通过SpringDelegatingActionProxy

  步骤:

  1Action中,使用IOC获得服务service对象)

  2、配置struts-config.xml

    <action       path="/somepath" type="org.springframework.web.struts.DelegatingActionProxy"/>

  3、在Spring配置文件中(让actionspring容器管)

    <bean name="/somepath" class="SomeAction">这里不能用id属性,因为它不能用/开头

    <property name="service"><ref bean=""/>

    </bean>

    注意,要用bean name命名。

    /somepath:Actionpath

  优点:

  不使用Spring api编写 Action

  利用了IOC装配。

  可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,

  避免strutsAction的线程安全问题。

  缺点:

  struts配置文件中,所有path都映射到同一个代理类

 

方式三:通过SpringDelegatingRequestProcessor(即通过替换struts控制器的方式)

  步骤:

  1Action中,使用IOC获得服务

  2、配置struts-config.xml

     <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />

<action       path="/somepath" type="SomeAction "/>

 

  3、在Spring配置文件中

每一个路径对应一个bean

    <bean name="/somepath" class="SomeAction">

    <property name="service"><ref bean=""/>

    </bean>

小结:

  SpringStruts整合方式只有两种:

  1)由Spring容器来管理Action(方式二,方式三)

  2Action处于容器之外(方式一)

  注意:

    中文问题:

    设置过滤器,设置页面编码,数据库编码

三、关于SpringEJB

  1SpringEJB3.0的对比

  SpringEJB3.0之间的关系是竞争关系。

  ① Spring是一个开源的框架,而EJB3.0是一个标准(标准意味着将得到广泛的支持以及良好的兼容性),并且,采用EJB3.0,项目的后期维护得到了保证。

  ② Spring是一个轻量级框架,EJB3.0是一个重量级框架(完整的容器,包含所有的服务)。

  ③ SpringIoCAOP集成了大量的开源框架,可扩展性良好。EJB3.0的可扩展性则完全依赖于新的容器。

    Spring对事务支持不如EJB3.0成熟,Spring对集群的兼容也不够。

⑤ SpringEJB3.0都是一个企业级开发框架,都支持声明式事务。

 

2Spring的优势与劣势

Spring的优势:

简化了企业级开发(对企业级服务进行了进一步的封装)

采用Spring框架的程序意味着良好的分层结构设计,并保证是面向接口编程的

IoCAOP容器,模块是可配置的,松耦合的,方便了后期维护

Spring的劣势:

配置复杂,不方便维护

容器大量使用反射等机制装配对象,影响性能,对于高并发的大型应用无能为力。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics