游戏攻略网
当前位置: 首页 游戏攻略

搭建ssh框架的基本步骤(ssh框架整合实战教程)

时间:2023-06-01 作者: 小编 阅读量: 2 栏目名: 游戏攻略

SSH框架的系统是基于MVC的。Struts是一个很好的MVC框架,主要技术是Servlet和Jsp。基于Struts开发可以简化开发难度,提高开发效率。Spring提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。Hibernate是用来持久化数据的,提供了完全面向对象的数据库操作。

SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。

集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。

SSH框架的系统是基于MVC的。Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。基于Struts开发可以简化开发难度,提高开发效率。

Spring 提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。

Hibernate 是用来持久化数据的,提供了完全面向对象的数据库操作。Hibernate对JDBC进行了非常轻量级的封装,它使得与关系型数据库打交道变得非常轻松。

在Struts+Spring+Hibernate系统中,对象之间的调用流程如下:

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”

xsi:schemaLocation=”http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/txhttp://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进行管理 服务层直接调用实现与数据库的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 Configuration2.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其中的一个配置文件:

<?xml version=”1.0″encoding=”utf-8″?>

<!DOCTYPEhibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD3.0//EN””http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd”>

<!–

Mappingfile 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>

<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>

Spring框架的作用和好处:

Spring框架提供了一个容器,该容器可以管理应用程序的组件,还提供了IoC和AoP机制,实现组件之间解耦,提高程序结构的灵活性,增强系统的可维护和可扩展性。

在SSH整合开发中,利用Spring管理Service、DAO等组件,利用IoC机制实现Action和Service,Service和DAO之间低耦合调用。利用AoP机制实现事务管理、以及共通功能的切入等。

功能是整合,好处是解耦。

Hibernate中操作并发处理(乐观锁和悲观锁)

Hibernate框架可以使用锁的机制来解决操作并发。

a.悲观锁

在数据查询出来时,就给数据加一个锁,锁定。这样其他用户再执行删、改操作时不允许。当占用着事务结束,锁会自动解除。

Hibernate采用的是数据库锁机制实现悲观锁控制。

缺点:将并发用户操作同步开,一个一个处理。当一个用户处理时间比较长时,效率会比较低。

b.乐观锁

允许同时更新提交,但是最快的会成功,慢的失败。

在记录中追加一个字段值,用该字段值当做版本。当最先提交者提交后,会自动将版本字段值提升,这样其他用户提交,会发现版本低于数据库记录目前版本,因此抛出异常提示失败。

特点:允许用户同时处理,但只能有一个成功,其他失败,以异常方式提示。

SSH工作流程

a.启动服务器,加载工程以及web.xml.

(实例化Lisener,Filter等组件,将Spring容器和Struts2控制创建)

b.客户端发送请求,所有请求进入Struts2控制器。控制器根据请求类型不同,分别处理。

(action请求,*.action会进入struts.xml寻找<action>配置.

其他请求,*.jsp会直接调用请求资源,生成响应信息)

c.Struts2控制器根据<action>配置调用一个Action对象处理。

整合方法一:将Action交给Spring容器

(Action对象由struts2-spring-plugin.jar插件提供的

StrutsSpringObjectFactory负责去Spring容器获取)

整合方法二:将Action置于Spring容器之外

(Action对象由struts2-spring-plugin.jar插件提供的

StrutsSpringObjectFactory负责创建,然后到Spring容器中寻找与Action属性匹配的Bean对象,给Action对象注入。(默认采用名称匹配规则)

d.Struts2控制器执行defaultStack拦截器、Action对象、Result等组件处理.

e.执行Action的execute业务方法时,如果使用Service或DAO采用Spring的IoC机制调用。

f.执行Result生成响应信息,执行后续拦截器处理

g.将响应信息输出。

    推荐阅读
  • steam棋牌游戏推荐(幸运之夜新版本亮相TGC)

    steam棋牌游戏推荐12月1日,2017腾讯游戏嘉年华正式在成都开幕,腾讯的VR社交游戏《幸运之夜》在现场发布了最新版本。VR《幸运之夜》在TGC2017上惊艳亮相《幸运之夜》新版本发布邀请好友一起游戏今年7月底,《幸运之夜》正式在Steam发布,并推出了首款游戏作品“德州扑克”。今年的TGC2017现场,《幸运之夜》全新版本便带来了对互动性方面的提升。

  • 儿童睡前故事卖火柴的小女孩大全(卖火柴的小女孩)

    在长发公主的故事里,兔子小姐变成了手持宝剑的骑士,穿过了山川和河流,战胜了地狱恶犬,最终救出了长着一头金黄色长发的熊猫先生。随着一阵空间的波动,熊猫先生和兔子小姐来到了冰天雪地的圣诞节。小女孩被这突如其来的变化惊呆了。熊猫先生没有回答,轻轻摸了摸小女孩的头。小女孩点燃了第二根火柴。熊猫先生和兔子小姐则来到壁炉前,商量起小女孩最后一个愿望。熊猫先生蹲下来,握起小女孩的手。

  • 怎样做ppr管快一点(PPR管安装方法及技巧)

    怎样做ppr管快一点PPR管安装方法及技巧首先准备好需要的材料:热熔机,小剪刀,ppr管,管件,手巾。一定要根据自己热熔ppr管的口径,准备相应的热熔头。清洁:清洁管材与管件的焊接段部位,建议用95%浓度酒精擦净。在熔接时间内迅速的将管材无旋转的垂直插入管件中,并维持5秒以上,然后按相应冷却时间冷却。热熔后做到横平竖直,美观大方。

  • 大托特包搭配技巧(大托特包搭配技巧简述)

    西装外套+托特包复古时尚的格子,由黑白交错的条纹形成,文艺而又端庄搭配撞色托特包,优雅而不失俏皮,让气场变得灵动起来内搭白色连帽卫衣,减龄又可爱,接下来我们就来聊聊关于大托特包搭配技巧?大托特包搭配技巧西装外套+托特包复古时尚的格子,由黑白交错的条纹形成,文艺而又端庄。衬衫+托特包白色的衬衫休闲慵懒,给人一种空灵的感觉以及干净纯粹的气质。

  • 刘涛电视剧口碑(电视剧景气指数第一)

    还记得3月份刘涛在和周渝民主演的《大宋宫词》中扮嫩出演少妇被很多观众吐槽。万万没想到时隔数月,刘涛带着她的新剧《星辰大海》杀回来了。目前主要的剧情线在刘涛饰演的女主简爱身上。因为小时候意外发现母亲出轨的事,得知真相的父亲激愤之下杀死母亲并自杀,简爱因此成为了一个孤女。逃出傻子家的简爱在与姑姑的争执中误伤姑姑,从此开启逃命生涯。简爱从面馆辞职走投无路,误打误撞进入大公司之后面临着同事的故意刁难。

  • 外墙装修材料有哪些 外墙装修材料有哪些类型

    外墙涂料具有装饰性良好、耐污染耐老化以及施工维修容易和价格合理的特点。一般来说釉面外墙砖有亚光面与无光面两大类。它的装饰的效果也不错,有柚木色、深灰色等等可供选择。由于它的表面的肌理很清晰,所以色泽漂亮且装饰性极强。本站,中国知名大型装修平台,装修领导品牌。

  • 世界上有哪些花(世界上有哪些花 名字)

    瓜叶菊、香豌豆、夏兰、石竹、石蒜、荷花、翠菊、睡莲、福禄考、晚香玉、万寿菊、千日红、建兰、铃兰、报岁兰、香堇、大岩桐、水仙、小草兰、瓜叶菊、蒲包花、免子花、入腊红、三色堇、百日草、鸡冠花、一串红。孔雀草、大波斯菊、金盏菊、非洲凤仙花、菊花、非洲菊、观赏凤梨类、射干、非洲紫罗兰、天堂鸟、炮竹红、菊花、康乃馨、红掌、满天星、星辰花、三角梅、虞美人。

  • 长歌行李长歌母亲是谁杀的(长歌行李长歌的简介)

    下面更多详细答案一起来看看吧!长歌行李长歌母亲是谁杀的《长歌行》李长歌母亲是自杀的。李长歌,太子李建成之女,生母则是回纥王族。父母手足均死于玄武门之变,满怀愤恨的长歌凭高超武艺逃出皇宫,并在追捕过程中制造“坠崖假死”而逃生,其后女扮男装隐瞒身份流落民间,一心只想为父母复仇,在家和国的利害冲突中,最后放弃复仇,和阿诗勒隼一起成为了民族和解的使者。

  • 什么时候喝蛋白粉增肌效果最好(什么时候喝蛋白粉增肌效果最好)

    从长远来看,这种方法被证明可以促使肌肉明显增长。如果摄入量超过一定的阈值,蛋白质的合成就会受限。如果是以乳清饮料的形式摄入乳清蛋白,运动者可以在运动结束后立即饮用。按每公斤体重1克的标准,在健身前后立即摄入以及在运动后1小时内摄入可快速吸收的碳水化合物,可以明显抑制肌肉分解,并大大促进肌肉快速和明显的增长。在这种情况下,大量分泌的胰岛素促进了氨基酸向工作中的肌肉运输,为蛋白质合成奠定基础。

  • 窦骁周冬雨山楂树之恋结局(周冬雨18岁第一次出演)

    周冬雨18岁第一次出演要说最近最火的电影,非《少年的你》莫属,上映14天,已经收获了12.45亿的票房成绩,成为现阶段最强的票房黑马而作为该片主演的周冬雨和易烊千玺,也凭借在该片中的精彩演出,演技得到大众的进一步认可作为“。