刚刚学习完SSH框架,但是如果让自己独立完成整个SSH环境的搭建还是十分困难的。今天自己也在一边回顾刚刚学习到的知识,一边实践地搭建了一个比较完美的SSH框架,当然也有一个非常简单的功能实现了。
说实话,看别人讲课或者跟着老师一起动手学习,真的比不上自己去独立的完成一次!接下来,我也是根据自己的学习总结,一步一步的跟大家分享SSH框架的知识。
另一方面,在以前我们在开发WEB项目的时候总是将业务逻辑和页面展示都混合在一起,导致在页面上的内容比较繁重,无疑增加了浏览器的负担,而且这样的开发模式的扩展性是值得反思的。后来通过MVC的架构模式将页面和数据处理的业务逻辑部分分离开来,将大大增加程序的复用性。但是,MVC的使用是十分复杂的,所以开发的效率就会因此受到影响, 而Struts的目的就是为了帮助我们减少在运用MVC设计模式来开发WEB应用的时间。struts通过将M-V-C三者关系的管理全部集成到了配置文件中,程序通过读取配置文件就可以明确调用关系,另外,对于开发人员来说这将是非常方便的。我们不再需要在系统的各个部分去维护MVC三者的关系了。
struts的配置demo:
然而,Spring就是一个负责管理Struts和Hibernate的框架,spring将struts和Hibernate的一些比较重复而且繁琐的内容全部管理起来,这样做的好处就是不在需要我们在整个项目中到处配置struts和Hibernate了。
关于SSH框架,我个人觉得如果是单个的某一个框架搭建起来都是比较容易的。比较复杂的就是如何利用spring将struts和Hibernate整合起来。
Spring对Hibernate的管理:
1.管理事务
Spring对Struts的管理
1.管理BeanFactory,在web.xm中配置如下:
总结:Hibernate封装了数据持久化的逻辑,struts将页面和业务逻辑分离,而spring将Hibernate和struts的控制管理起来。spring最大的作用也就是管理,或者说spring的核心就是一个IOC容器的具体实现。通过spring,增加了我们开发的效率,同样也使得程序更加健壮。另外,俗话说任何事物都是有两面性的,所以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有它的好处,当然就会有其弊端:影响程序的运行性能!