ssh框架介绍
SSH 为 struts+spring+hibernate 的⼀个集成框架,是⽬前较流⾏的⼀种JAVA Web应⽤程序开源框架。
Struts
Struts是⼀个基于Sun J2EE平台的MVC框架,主要是采⽤Servlet和JSP技术来实现的。由于Struts能充分满⾜应⽤开发的需求,简单易⽤,敏捷迅速,在过去的⼀年中颇受关注。Struts把Servlet、JSP、⾃定义标签和信息资源(message resources)整合到⼀个统⼀的框架中,开发⼈员利⽤其进⾏开发时不⽤再⾃⼰编码实现全套MVC模式,极⼤的节省了时间,所以说Struts是⼀个⾮常不错的应⽤框架。
官⽅地址:
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:
Hibernate
Hibernate是⼀个开放源代码的对象关系映射框架,它对JDBC进⾏了⾮常轻量级的对象封装,使得Java程序员可以随⼼所欲的使⽤对象编程思维来操纵数据库。 Hibernate 可以应⽤在任何使⽤JDBC的场合,既可以在Java的客户端程序实⽤,也可以在Servlet/JSP的Web应⽤中使⽤,最具⾰命意义的是,Hibernate可以在应⽤EJB的J2EE架构中取代CMP,完成数据持久化的重任。
官⽅地址:
在SSH 的组合框架模式中,三者各⾃的作⽤
Struts 是⼀个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变
得很清晰,让我们写的程序层次分明。
Spring 提供了管理业务对象的⼀致⽅法,并⿎励注⼊对接⼝编程⽽不是对类编程的良好习惯,使我们的产品在最⼤程度上解耦。
Hibernate 是⽤来持久化数据的,提供了完全⾯向对象的数据库操作。Hibernate对JDBC进⾏了⾮常轻量级的封装,它使得与关系型数据库打交道变得⾮常轻松。
以下是SSH架构图:
SSH架构图
Struts负责Web层:
ActionFormBean接收⽹页中表单提交的数据,然后通过Action进⾏处理,再Forward到对应的⽹页,在l中定义了<action-mapping>,ActionServlet会加载进来。
Spring负责业务层管理,即Service:
Service为Action提供统⼀的调⽤接⼝,封装持久层的DAO,并集成Hibernate,Spring可对JavaBean和事物进⾏统⼀管理。
Hibernate负责持久层,完成数据库的CRUD操作:
Hibernate有⼀组l⽂件和PO,是与数据库中的表相对应的,然后定义DAO,这些是与数据库打交道的类。
在Struts+Spring+Hibernate系统中,对象之间的调⽤流程如下:
Struts——>Spring——>Hibernate
JSP——>Action——>Service——>DAO——>Hibernate
1.spring的配置⽂件l
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.1.xsd /schema/tx /schema/tx/spring-tx.xs xmlns:tx="/schema/tx">
<bean id="dataSource"
class="hange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/samblog?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true">
</property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
<property name="driverClass" value="sql.Driver"/>
</bean>
<bean id="sessionFactory"
class="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/l</value>
<value>site/sambloger/domain/l</value>
<value>site/sambloger/domain/l</value>
<value>site/sambloger/domain/l</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="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>
</beans>
2.struts的配置⽂件 l
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""/dtds/struts-2.1.dtd"> <struts>
<package name="samblog" extends="struts-default"namespace="/">
<action name="init"class="blogAction" method="init">
<result name="success">/bloglist.jsp</result>
</action>
<action name="getBlog"class="blogAction" method="getBlog">
<result name="success">/displayBlog.jsp</result>
</action>
<action name="getAllNote"class="blogAction" method="getAllNote">
<result name="success">/notelist.jsp</result>
</action>
<action name="addComment"class="commentAction" method="addComment">
<result name="success" type="redirect">/getBlog</result>
</action>
</package>
</struts>
3.hibernate其中的⼀个配置⽂件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="site.sambloger.domain.Blog" table="blog">
<!--id标签表⽰映射到数据库中是作为主键其他property表⽰普通键-->
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<!--该标签加N⽅会有⼀个字段叫category_id作为外键参照1(Category)的主键字段并且⽤来存储这个主键的信息-->
<many-to-one name="category"class="site.sambloger.domain.Category" lazy="false" cascade="all">
<column name="category_id" not-null="true" />
</many-to-one>
<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>
jsp定义<property name="createdTime" type="java.util.Date">
<column name="created_time" length="10" not-null="true" />
</property>
<!--在⼀对多的关联中,在⼀的⼀⽅(Blog)设置inverse=”true”让多的⼀⽅来维护关联关系更有助于优化,因为可以减少执⾏update语句-->
<set name="comments" inverse="true">
<key>
<column name="blog_id" not-null="true" />
</key>
<one-to-many class="site.sambloger.domain.Comment" />
</set>
</class>
</hibernate-mapping>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论