SSH总结

     刚刚学习完SSH框架,但是如果让自己独立完成整个SSH环境的搭建还是十分困难的。今天自己也在一边回顾刚刚学习到的知识,一边实践地搭建了一个比较完美的SSH框架,当然也有一个非常简单的功能实现了。
    说实话,看别人讲课或者跟着老师一起动手学习,真的比不上自己去独立的完成一次!接下来,我也是根据自己的学习总结,一步一步的跟大家分享SSH框架的知识。

     Hibernate主要是一个数据持久层的框架,所以它主要负责的就是数据的持久化工作。我们如果只用Hibernate编程的话,就会发现,我们只要和数据库交互的时候都会有重复的几行代码:

<span style="font-size:24px;">    
		//声明Session
        <span style="white-space:pre">	</span>Session session = null;
		try {
    
			session = HibernateUtils.getSession();
			session.beginTransaction();
		
			
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}</span>
        从上面的代码可以看出,在所有的方法中,我们都不可避免的需要重复的写入这些方法操作。所以,这样的代码结构是糟糕的。
        另一方面,在以前我们在开发WEB项目的时候总是将业务逻辑和页面展示都混合在一起,导致在页面上的内容比较繁重,无疑增加了浏览器的负担,而且这样的开发模式的扩展性是值得反思的。后来通过MVC的架构模式将页面和数据处理的业务逻辑部分分离开来,将大大增加程序的复用性。但是,MVC的使用是十分复杂的,所以开发的效率就会因此受到影响, 而Struts的目的就是为了帮助我们减少在运用MVC设计模式来开发WEB应用的时间。struts通过将M-V-C三者关系的管理全部集成到了配置文件中,程序通过读取配置文件就可以明确调用关系,另外,对于开发人员来说这将是非常方便的。我们不再需要在系统的各个部分去维护MVC三者的关系了。
  struts的配置demo:

<struts-config>
	<form-beans>
		<form-bean name="loginform" type="com.lcy.ActionForm.LoginActionForm"/>
	</form-beans>
   <action-mappings>
   	<action path="/login"
   			type="org.springframework.web.struts.DelegatingActionProxy"
   			name="loginform"
   			scope="request"
   			
   	>
   		<forward name="success" path="/login_success.jsp"></forward>
   	
   	</action>
   </action-mappings>
</struts-config>
至此,我们有了Hibernate来处理数据的持久化,又有了Struts来将页面展示和数据的处理分离开来。但是这样还是不完美的。前面说了在使用Hibernate时的不足,而 struts同样是不能令人满意的。最主要的就是在Controller中我们不得不实例化一个Dao层来实现数据的持久化,这样我们的程序中会到处都是实例化的语句,而当我们需要换一个新的数据持久化方法的时候,我们就不得不去改动代码了。所以改变是必须的
       然而,Spring就是一个负责管理Struts和Hibernate的框架,spring将struts和Hibernate的一些比较重复而且繁琐的内容全部管理起来,这样做的好处就是不在需要我们在整个项目中到处配置struts和Hibernate了。
    关于SSH框架,我个人觉得如果是单个的某一个框架搭建起来都是比较容易的。比较复杂的就是如何利用spring将struts和Hibernate整合起来。
    Spring对Hibernate的管理:
1.管理事务

<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory"/>			
		</property>
	</bean>
	
	
 	<!-- 那些类那些方法使用事务 -->
 	<aop:config>
		<aop:pointcut id="allManagerMethod" expression="execution(* com.lcy.dao.*.*(..))"/>
		<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
	</aop:config>
	
 	
 	<!-- 事务的传播特性 -->	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="del*" propagation="REQUIRED"/>
			<tx:method name="modify*" propagation="REQUIRED"/>
			<tx:method name="*" propagation="REQUIRED" read-only="true"/>
		</tx:attributes>
	</tx:advice>
2.管理Session

<span style="white-space:pre">	</span><!-- 配置SessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
	</bean>

Spring对Struts的管理
    1.管理BeanFactory,在web.xm中配置如下:

<span style="font-size:24px;"><context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>
  
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener></span>
  2.分布在程序各处的实例化问题。

<span style="font-size:24px;">		 <bean name="/login"  class="com.lcy.Action.LoginAction">
 			<property name="userManager" ref="itemdao"/>
 		</bean></span>
 值得注意的是这里没有用id而是用了name属性,这样做的目的就是为了使得spring能够和struts中的 action中的path属性一致。

总结:Hibernate封装了数据持久化的逻辑,struts将页面和业务逻辑分离,而spring将Hibernate和struts的控制管理起来。spring最大的作用也就是管理,或者说spring的核心就是一个IOC容器的具体实现。通过spring,增加了我们开发的效率,同样也使得程序更加健壮。另外,俗话说任何事物都是有两面性的,所以SSH有它的好处,当然就会有其弊端:影响程序的运行性能!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值