谈谈基于ssh的j2EE开发模式

学了那么久的ssh和web开发,今天想为此写点东西,由于我自己的技术不是很强,文笔也有限,所以希望大家别笑话我,如果有不对的地方,还请各位不吝赐教。

大家都知道,现在ssh这个框架组合是当前使用较多的一个,我也是觉得说以后去上班肯定会用到这个的才自己去学习。

        SSH中,strut2的action担任着控制器的作用,它通过响应用户的操作来指示系统的行为,在我以往的设计中,我会用一个jsp页面来对应一个后台action,比如在图书馆管理系统中的借书功能页面,我在后台用一个名为BorrowBookManagement的action来响应用户的界面操作,比如当图书馆管理员点击确定借书按钮时BorrowBookManagement便会执行borrow方法去更新一系列相关的数据表,可以说这个action是基于UI层之上的同用户与系统交互的入口点

        对于spring这个框架的话,说真的,在项目中接触到的不会很深。我们都知道整合三大框架的时候一般的习惯是先整合spring和hibernate,然后才会去整合进strut2,通过整合的过程和一些配置文件的体现,我能明显感觉到spring作为作为整个项目的核心包含了很多部分,比如在beans.xml文件中我们有一段以下配置:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
   <property name="mappingResources">
       <list>
         <value>cn/watermellon/bean/Employee.hbm.xml</value>
       </list>
  </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>
 </bean>

        这段配置配置了spring支持hibernate操作的sessionFactory,这样我在数据访问层中就可以通过依赖注入的方式获取sessionFactory的单实例,通过该实例来实现的数据库的操作,接下来在beans.xml文件还有一段这样的配置:

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"/>
 </bean>
 <!--使用基于注解方式配置事务 -->
 <tx:annotation-driven transaction-manager="txManager"/>

        这是配置了spring支持hibernate事务的管理器,也就是说将hibernate关于事务的管理交给spring容器统一管理。这是spring和hibernate整合时spring体现之处,在与strust2整合时首先需要在web.xml文件中实例化spring容器,接下里在所有的action类中都加上一个@Controller,这样做的结果就是使得这个类能被spring容器识别,并纳入action管理,这样在struts2.xml的配置文件中就不必指明该action类的地址,只需要注明这个action在spring管理中的类名,比如上面的BorrowBookManagement类:

<package name="ui" namespace="/ui" extends="struts-default">
     <action name="borrowbook" class="borrowBookManagement">
        <result name="reader">/WEB-INF/page/bb_reader.jsp</result>
        <result name="book">/WEB-INF/page/bb_book.jsp</result>
     </action>
</package>

这样当你访问../ui/borrowbook.action时就可以访问到BorrowBookManagement这个action了,所以还是挺方便的。

       SSH中的hibernate框架是一个ORM框架,它负责的是数据访问层,通过获取在spring配置好的sessionFactory对象,来对数据库进行增删改查,这其实就是数据访问层,也就是所谓的DAO层,通过向外提供接口,业务层就可以对数据库进行操作,十分方便。

       说到接口的话,就要说说J2EE的开发模式,从传智播客的黎活明老师那里学到说对于J2EE的开发最好是基于接口的开发,所以根据这种原则,在项目中我为所有的业务类定义了业务的接口,而在业务类中可以通过注解的方式来实例化一个业务类,当然为什么要这样我也不是很懂,如果有知道的朋友记得交流下哈。

       在开发中一个action对应于一个jsp页面,所以这个有可能导致的一种情况就是必须在action类中定义过多的属性变量(我们知道,struts2中的action同界面互传参数时,只需要在action类中定义与页面元素同名的属性就可以),如果你都把一个个的定义在action里面会导致你的action类过于臃肿,所以这时我们可以定义一个辅助类来存储这些杂乱的属性,保证action的整洁。

       暂时就说这么多了,大家觉得那里我那里理解错了,可以指出,我们一起学习。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章