SSH整合

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

Struts:

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

在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。(View:沿用JSP,HTTP,Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)

Hibernate:

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

Spring:

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

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

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

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

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

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

  B、文档完善

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

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

二、Spring与Struts整合

  前提:

    必须在Web应用启动时,创建Spring的ApplicationContext实例

  方式:

    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>

    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应用上下文

   

方式一:通过Spring的ActionSupport类

  ActionSupport类:

  知道ApplicationContext的获得方式。

  步骤:

  1、Action直接继承ActionSupport

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

  3、取得相应Bean

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

  优点:

    简单

  缺点:

    耦合高

    违反IOC

    无法使用多方法的Action

 

方式二:通过Spring的DelegatingActionProxy类

  步骤:

  1、Action中,使用IOC获得服务

  2、配置struts-config.xml

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

  3、在Spring配置文件中

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

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

    </bean>

    注意,要用bean name命名。

    /somepath:Action的path

  优点:

  不使用Spring api编写 Action

  利用了IOC装配。

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

  避免struts中Action的线程安全问题。

  缺点:

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

 

方式三:通过Spring的DelegatingRequestProcessor类

  步骤:

  1、Action中,使用IOC获得服务

  2、配置struts-config.xml

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

  3、在Spring配置文件中

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

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

    </bean>

小结:

  Spring与Struts整合方式只有两种:

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

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

  注意:

    中文问题:

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

三、关于Spring与EJB

  1、Spring与EJB3.0的对比

  Spring与EJB3.0之间的关系是竞争关系。

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

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

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

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

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

 

2、Spring的优势与劣势

Spring的优势:

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

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

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

Spring的劣势:

① 配置复杂,不方便维护

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

原文地址:https://www.cnblogs.com/qq739178184/p/5083522.html