ssh整合

看过了两三个SSH搭建的视频(浪曦风中叶老师、尚学堂李勇老师的两个视频),也跟着视频把这个框架搭了两遍,有点迷迷糊糊的,为了加深印象,我决定不依靠视频再来搭一遍,
经过一天的调试与处理,终于能够独立自主地把SSH框架给搭建起来了,不容易啊。
其中出现的错误以及各种各样的BUG不计其数,通过查阅文档以及Google得到了解决。这里,我就来做一个总结:

SSH框架的基本配置:
1.相关jar包的引入,这里我采用的是spring2 + struts2 + hibernate3的组合,搭完了之后才发现Spring已经到3了,
不知道在Spring3上面的配置是否相同,有待尝试。

Code:
  1. -----核心jar包-----   
  2. # spring.jar    
  3. # struts2-core.jar   
  4. # xwork-core.jar   
  5. # mysql-connector-java.jar   
  6. # hibernate3.jar   
  7. # struts2-spring-plugin.jar   
  8. -----在默认配置下核心jar所依赖的jar包---   
  9. # commons-collections.jar  ---|   
  10. # commons-fileupload.jar -----|------------这三个jar包是在jakarta-commons项目中一些   
  11. # commons-logging.jar --------|            基于JDK上扩展的工具包。   
  12. # freemarker.jar   
  13. # log4j.jar   
  14. # ognl.jar   
  15. # dom4j.jar   
  16. # jta.jar   
  17. # cglib-nodep.jar   
  18. # antlr.jar  ------------ 这个jar包是spring AOP 采用 动态代理 时需要的jar包。   


2.相关的配置
 i)/WEB-INF/web.xml
 a.需要配置一个Struts2的Filter:

Code:
  1. < filter >   
  2.   < filter-name > struts2 </ filter-name >   
  3.   < filter-class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </ filter-class >   
  4. </ filter >   
  5. < filter-mapping >   
  6.   < filter-name > struts2 </ filter-name >   
  7.   < url-pattern > /* </ url-pattern >   
  8. </ filter-mapping >   


 b.由于从struts2.1.3之后的版本不再建议采用org.apache.struts2.dispatcher.FilterDispatcher,所以,我们最好
 配置成StrutsPrepareAndExecuteFilter或者StrutsExecuteFilter以及StrutsPrepareFilter,需要注意的是:如果配置
 成StrutsExecuteFilter需要将StrutsPrepareFilter也配置上,否则将会报错。所以建议就只直接采用StrutsPrepareAndExecuteFilter。

 c.此外还需要配置一个ContextListener:

Code:
  1. <listener>   
  2.    <listener- class >   
  3.         org.springframework.web.context.ContextLoaderListener   
  4.    </listener- class >   
  5. </listener>   


 如果你的applicationContext.xml没有配置在/WEB-INF/目录或者采用的不是默认的文件名,则还需要配置context-param,让Spring找到对应的
 配置文件,如下(注意:param-name的内容一定是contextConfigLocation,Spring将根据该名称注入到相应的对象中):

Code:
  1. < context-param >   
  2.   < param-name > contextConfigLocation </ param-name >   
  3.   < param-value > classpath*:application-Context.xml </ param-value >   
  4. </ context-param >   

 ii)applicationContext.xml,这个文件是比较核心的文件:

 a)配置sessionFactory,有两种配置方式:
 (1)采用传统的Hibernate配置文件,将其映射到sessionFactory中:

Code:
  1. < bean   id = "sessionFactory"   class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >   
  2.   < property   name = "configLocation"   >   
  3.    < value > classpath:hibernate.cfg.xml </ value >   
  4.   </ property >   
  5. </ bean >   


 采用这种方式时,需要在hibernate.cfg.xml文件中配置数据连接相关信息,这里与一般的hibernate配置文件一样:

Code:
  1. < hibernate-configuration >   
  2.   < session-factory >   
  3.    <!-- connection configuration -->   
  4.    < property   name = "hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >   
  5.    < property   name = "hibernate.connection.url" > jdbc:mysql://localhost:3306/ssh_test </ property >   
  6.    < property   name = "hibernate.connection.username" > root </ property >   
  7.    < property   name = "hibernate.connection.password" > orange </ property >   
  8.    < property   name = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ property >   
  9.    <!-- the following configuration just for  programming and debug -->   
  10.    < property   name = "hibernate.show_sql" > true </ property >   
  11.      
  12.    <!-- mapping resource -->   
  13.    < mapping   resource = "com/ssh/bean/User.hbm.xml" />   
  14.   </ session-factory >   
  15. </ hibernate-configuration >   

 (2)采用sessionFactory属性的方式配置数据源相关信息,如下:

Code:
  1. <!-- 配置数据源 -->   
  2. < bean   id = "dataSource"   class = "org.apache.commons.dbcp.BasicDataSource"   destroy-method = "close" >   
  3.   < property   name = "driverClassName"   value = "com.mysql.jdbc.Driver"   />   
  4.   < property   name = "url"   value = "jdbc:mysql://localhost:3306/mytest"   />   
  5.   < property   name = "username"   value = "root"   />   
  6.   < property   name = "password"   value = "orange"   />   
  7.   < property   name = "maxActive"   value = "100"   />   
  8.   < property   name = "maxIdle"   value = "30"   />   
  9.   < property   name = "maxWait"   value = "500"   />   
  10.   < property   name = "defaultAutoCommit"   value = "true"   />   
  11. </ bean >   
  12.   
  13. <!-- 将数据源映射到sessionFactory中 -->   
  14. < bean   id = "sessionFactory"   class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >   
  15.   < property   name = "dataSource"   ref = "dataSource"   />   
  16.   < property   name = "hibernateProperties" >   
  17.    < props >   
  18.     < prop   key = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >   
  19.     < prop   key = "hibernate.show_sql" > true </ prop >   
  20.    </ props >   
  21.   </ property >   
  22.   < property   name = "mappingResources" >   
  23.    < list >   
  24.     < value > com/test/bean/User.hbm.xml </ value >   
  25.    </ list >   
  26.   </ property >   
  27. </ bean >   


 
 b)配置完sessionFactory后,还可以根据需要配置以下三方面的内容,也可以不配置选择采用默认的方式:

Code:
  1. <!-- 配置事务管理器 -->   
  2. < bean   id = "transactionManager"   class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >   
  3.   < property   name = "sessionFactory" >   
  4.    < ref   bean = "sessionFactory" />   
  5.   </ property >     
  6. </ bean >   
  7.   
  8. <!-- 配置事务的传播特性 -->   
  9. < tx:advice   id = "txAdvice"   transaction-manager = "transactionManager" >   
  10.   < tx:attributes >   
  11.    < tx:method   name = "add*"   propagation = "REQUIRED" />   
  12.    < tx:method   name = "del*"   propagation = "REQUIRED" />   
  13.    < tx:method   name = "modify*"   propagation = "REQUIRED" />   
  14.    < tx:method   name = "*"   read-only = "true" />   
  15.   </ tx:attributes >   
  16. </ tx:advice >   
  17.   
  18. <!-- 那些类的哪些方法参与事务 -->   
  19. < aop:config >   
  20.   < aop:pointcut   id = "allManagerMethod"   expression = "execution(* xxx.xxx.*.*(..))" />   
  21.   < aop:advisor   pointcut-ref = "allManagerMethod"   advice-ref = "txAdvice" />   
  22. </ aop:config >   

这样就基本完成了我们的ssh的相关配置。

3.SSH的基本使用:
 具体分工:
 # 在applicationContext.xml中配置相关的bean信息

Code:
  1. < bean   id = "userService"   class = "com.ssh.service.impl.UserServiceImpl" >   
  2.   < property   name = "userDao"   ref = "userDao" />   
  3. </ bean >   
  4.   
  5. < bean   id = "loginAction"   class = "com.ssh.action.LoginAction" >   
  6.   < property   name = "service"   ref = "userService"   />   
  7. </ bean >   

 这里的property属性中name值对应的是相应处理类生成时需要IoC容器注入的属性,比如说id为loginAction的处
 理类为com.ssh.action.LoginAction(它其中应当设置一个setService(UserService service)方法),这样在需要使
 用该bean时,IoC容器会调用这个setService方法来将生成的userService对象传入。
 需要注意的是,如果想让IoC容器注入相应属性,则必须要实现相应属性的set方法。

 # 在struts.xml中配置action的相关信息
 相关注意事项:
 由于所有的bean都由Spring来管理,那么在struts.xml中一个action的class属性就不能写成具体的类,
 而是要使用该类在applicationContext.xml文件中配置的Bean的id,如:

Code:
  1. < action   name = "login"   class = "loginAction" >   
  2.    < result   name = "success" > /result.jsp </ result >   
  3.    < result   name = "input" > /index.jsp </ result >   
  4.   </ action >   


 这个loginAction对应的就是上面的id为loginAction的bean,而这个bean的class属性中设置的才是真正
 的对应的Action的处理类。

 # 对于每个模型,都要有一*.hbm.xml

3.其它一些注意点:
Spring中一些的概念很重要:AOP,IOC。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值