SSH框架

SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架。

Struts

Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
1.优点:
①开源的框架,结构清晰
②是MVC的经典实现(MVC是一种思想,而不是一种技术)
③处理异常机制,实现国际化
④具有强大的标签库
⑤解决了JSP页面存在大量的JAVA代码,维护起来方便
⑥在formBean中会自动提交,不会去使用传统的get、set方法得到值、取值

2.缺点:
①配置复杂
②测试不方便
③依赖web容器
④action是一个单例模式,必须设置为线程安全
在这里插入图片描述

Spring

Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IOC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务–如果你需要–还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。       
轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
在这里插入图片描述
  解析:上图是在struts结构图的基础上加入了spring流程图,在web.xml配置文件中加入了spring的监听器,在struts.xml配置文件中添加“”是告知Struts2运行时使用Spring来创建对象,spring在其中主要做的就是注入实例,将所有需要类的实例都由spring管理
  官方地址:spring: http://www.springsource.org

Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
  为什么使用Hibernate?
1). 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2)、Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。
3)、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
4)、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。在这里插入图片描述
在这里插入图片描述
  官方地址:http://www.hibernate.org

在SSH 的组合框架模式中,三者各自的作用

Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。
Spring 提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。
Hibernate 是用来持久化数据的,提供了完全面向对象的数据库操作。Hibernate对JDBC进行了非常轻量级的封装,它使得与关系型数据库打交道变得非常轻松。

以下是SSH架构图:

SSH架构图
  Struts负责Web层:
  ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页,在Struts-config.xml中定义了,ActionServlet会加载进来。
  Spring负责业务层管理,即Service:
  Service为Action提供统一的调用接口,封装持久层的DAO,并集成Hibernate,Spring可对JavaBean和事物进行统一管理。
  Hibernate负责持久层,完成数据库的CRUD操作:
  Hibernate有一组hbm.xml文件和PO,是与数据库中的表相对应的,然后定义DAO,这些是与数据库打交道的类。
  在Struts+Spring+Hibernate系统中,对象之间的调用流程如下:

            
  Struts——>Spring——>Hibernate
  JSP——>Action——>Service——>DAO——>Hibernate

复制代码
1.spring的配置文件bean.xml

<?xml version="1.0" encoding="UTF-8"?>

<bean id="dataSource"
      class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="jdbcUrl"
              value="jdbc:mysql://localhost:3306/samblog?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true">
    </property>
    <property name="user" value="root"></property>
    <property name="password" value="123456"></property>
    <property name="driverClass" value="org.gjt.mm.mysql.Driver"/>
</bean>
<bean id="sessionFactory"
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource"/>
    </property>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
            hibernate.hbm2ddl.auto=update
            hibernate.show_sql=false
            hibernate.format_sql=false
        </value>
    </property>
    <property name="mappingResources">
        <list>
            <value>site/sambloger/domain/Users.hbm.xml</value>
            <value>site/sambloger/domain/Blog.hbm.xml</value>
            <value>site/sambloger/domain/Category.hbm.xml</value>
            <value>site/sambloger/domain/Comment.hbm.xml</value>
        </list>
    </property>
</bean>

<bean id="transactionManager"
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

<!-- 配置Blog  spring进行管理  服务层直接调用实现与数据库的CRUD-->
<bean id="blogDao" class="site.sambloger.dao.impl.BlogDAOImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="blogService" class="site.sambloger.service.impl.BlogServiceImpl" scope="prototype">
    <property name="blogDao" ref="blogDao"/>
</bean>
<bean id="blogAction" class="site.sambloger.action.BlogAction">
    <property name="blogService" ref="blogService"/>
    <property name="commentService" ref="commentService"/>
</bean>

<!-- 配置Comment -->
<bean id="commentDao" class="site.sambloger.dao.impl.CommentDAOImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="commentService" class="site.sambloger.service.impl.CommentServiceImpl" scope="prototype">
    <property name="commentDao" ref="commentDao"/>
</bean>
<bean id="commentAction" class="site.sambloger.action.CommentAction">
    <property name="commentService" ref="commentService"/>
    <property name="blogService" ref="blogService"/>
</bean>

<!-- 配置Users -->
<bean id="usersDao" class="site.sambloger.dao.impl.UsersDAOImpl">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="usersService" class="site.sambloger.service.impl.UsersServiceImpl" scope="prototype">
    <property name="usersDao" ref="usersDao"/>
</bean>
<bean id="usersAction" class="site.sambloger.action.UsersAction">
    <property name="userService" ref="usersService"></property>
</bean>
2.struts的配置文件 struts.xml <?xml version="1.0" encoding="UTF-8" ?> /bloglist.jsp /displayBlog.jsp /notelist.jsp /getBlog 3.hibernate其中的一个配置文件 <?xml version="1.0" encoding="utf-8"?>
    <property name="title" type="java.lang.String">
        <column name="title" length="400" not-null="true" />
    </property>

    <property name="content" type="java.lang.String">
        <column name="content" length="4000" not-null="true" />
    </property>

    <property name="createdTime" type="java.util.Date">
        <column name="created_time" length="10" not-null="true" />
    </property>
    <set name="comments" inverse="true">
        <key>
            <column name="blog_id" not-null="true" />
        </key>
        <one-to-many class="site.sambloger.domain.Comment" />
    </set>
</class>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值