更新時(shí)間:2022-12-20 10:45:31 來源:動力節(jié)點(diǎn) 瀏覽1442次
SSH是 struts+spring+hibernate的一個(gè)集成框架,是目前比較流行的一種Web應(yīng)用程序開源框架。
集成SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的Web應(yīng)用程序。
Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負(fù)責(zé)MVC的分離,在Struts框架的模型部分,控制業(yè)務(wù)跳轉(zhuǎn);利用Hibernate框架對持久層提供支持,Spring做管理,管理struts和hibernate。具體做法是:用面向?qū)ο蟮姆治龇椒ǜ鶕?jù)需求提出一些模型,將這些模型實(shí)現(xiàn)為基本的Java對象,然后編寫基本的DAO(Data Access Objects)接口,并給出Hibernate的DAO實(shí)現(xiàn),采用Hibernate架構(gòu)實(shí)現(xiàn)的DAO類來實(shí)現(xiàn)Java類與數(shù)據(jù)庫之間的轉(zhuǎn)換和訪問,最后由Spring做管理,管理struts和hibernate。
Struts 是一個(gè)很好的MVC框架,主要技術(shù)是Servlet和Jsp。Struts的MVC設(shè)計(jì)模式可以使我們的邏輯變得很清晰,讓我們寫的程序?qū)哟畏置鳌?/p>
Spring 提供了管理業(yè)務(wù)對象的一致方法,并鼓勵(lì)注入對接口編程而不是對類編程的良好習(xí)慣,使我們的產(chǎn)品在最大程度上解耦。
Hibernate 是用來持久化數(shù)據(jù)的,提供了完全面向?qū)ο蟮臄?shù)據(jù)庫操作。Hibernate對JDBC進(jìn)行了非常輕量級的封裝,它使得與關(guān)系型數(shù)據(jù)庫打交道變得非常輕松。
Struts負(fù)責(zé)Web層:
ActionFormBean接收網(wǎng)頁中表單提交的數(shù)據(jù),然后通過Action進(jìn)行處理,再Forward到對應(yīng)的網(wǎng)頁,在Struts-config.xml中定義了,ActionServlet會加載進(jìn)來。
Spring負(fù)責(zé)業(yè)務(wù)層管理,即Service:
Service為Action提供統(tǒng)一的調(diào)用接口,封裝持久層的DAO,并集成Hibernate,Spring可對JavaBean和事物進(jìn)行統(tǒng)一管理。
Hibernate負(fù)責(zé)持久層,完成數(shù)據(jù)庫的CRUD操作:
Hibernate有一組hbm.xml文件和PO,是與數(shù)據(jù)庫中的表相對應(yīng)的,然后定義DAO,這些是與數(shù)據(jù)庫打交道的類。
在Struts+Spring+Hibernate系統(tǒng)中,對象之間的調(diào)用流程如下:
Struts——>Spring——>Hibernate
JSP——>Action——>Service——>DAO——>Hibernate
1.spring的配置文件bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
xmlns:tx="http://www.springframework.org/schema/tx">
<bean id="dataSource"
class="com.mchange.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="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進(jìn)行管理 服務(wù)層直接調(diào)用實(shí)現(xiàn)與數(shù)據(jù)庫的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的配置文件 struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/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其中的一個(gè)配置文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="site.sambloger.domain.Blog" table="blog">
<!--id標(biāo)簽表示映射到數(shù)據(jù)庫中是作為主鍵 其他property表示普通鍵-->
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<!--該標(biāo)簽加N方 會有一個(gè)字段叫category_id作為外鍵參照1(Category)的主鍵字段 并且用來存儲這個(gè)主鍵的信息-->
<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>
<property name="createdTime" type="java.util.Date">
<column name="created_time" length="10" not-null="true" />
</property>
<!--在一對多的關(guān)聯(lián)中,在一的一方(Blog)設(shè)置inverse=”true”讓多的一方來維護(hù)關(guān)聯(lián)關(guān)系更有助于優(yōu)化,因?yàn)榭梢詼p少執(zhí)行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>
以上就是關(guān)于“SSH框架是什么”的介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下本站的SSH框架視頻教程,里面的課程內(nèi)容細(xì)致全面,通俗易懂,很適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743