Spring整合Struts2 wel.xml中写spring核心配置文件路径问题,顺便总结下我学习SSH整合的过程

来源:互联网 发布:国内cms排行 编辑:程序博客网 时间:2024/05/17 07:04

     这两天我学习了Spring整合Hibernate和Struts2的知识,在这篇博客中分享一下我的学习心得和遇到的问题(第一次写博客~(>_<)~ ,不好的地方请见谅!我还只是个小白~)

其中Hibernate的整合很成功,步骤:

1、导入资源文件db.properties(里面是连接数据库的信息,如图:)


2、配置C3P0数据源(Hibernate底层与数据库连接就是基于的C3P0连接池实现的)


3、配置SessionFactory:

在配置这个工厂bean的时候需要写三个参数:①数据源;②hibernate核心配置文件hibernate.cfg.xml的路径;③实体类的hbm映射文件路径(这个特别方便,今后可以不需在hibernate.cfg.xml中声明了,而且可以用*通配符,一键导入)

Spring整合了SessionFactory还有个很大的作用,那就是今后不用再像学hibernate时那样写HibernateUtil类了,全部交给Spring帮我们在dao实现层来生成SessionFactory然后获得session了。


4、配置Spring的声明式事务:有三个步骤:

①配置hibernate的事务管理器:这个有什么用呢?跟SessionFactory一样,我们不需要像学hibernate的时候那样在dao实现层通过session.beginTransaction()来开启事务了,交给Spring来帮我们开启hibernate对数据库操作的事务

②配置Spring的事务属性:Spring事务属性包括:事务隔离级别、回滚事务、只读事务、过期事务,还有Spring的事务传播行为也在这里配置,Spring的事务属性和事务传播行为我觉得还是比较重要,需要大家去实实在在学一学

③配置事务切入点并关联事务属性:这里用到了Spring最强大的两大功能之一,AOP[面向切面编程](另一个功能是Spring通过IOC[依赖注入]使我们程序之间得到解耦而且便于管理程序,具体IOC是什么,请大家参考我转载的这一篇博客(讲的超级鸡巴好):http://blog.csdn.net/qq_28202597/article/details/49532025)

那么,它的作用是什么呢?从我现在学习的知识水平来讲一下我的理解:咱们dao实现层中的每一个方法都是对数据库的一个CRUD操作,而在这些操作前我们是不是应该开启事务,然后在这些操作完后还要关闭事务,咱们对数据库的一次读取或操作才算完整。那么AOP的作用就是帮我们把这些操作的一前一后给“切了”,然后再在前后加入你想要加入的东西----数据库事务的开启与关闭,当然后还可以加入其他的功能。其实,我上面说的对dao层进行切割是不准确的,我们真正的实际开发中,还会有个service层,这层才是我们项目中每一个业务逻辑的方法所在,我们真正要切的才是这一层,然后在一前一后插入我们想要的业务逻辑功能。

然后将dao实现层、service实现层的各个类注入到Spring的IOC容器中,让他来帮我们管理。Spring是怎么做到的呢?可以看上面我发的那个博客链接,真的讲得很好,Spring的IOC容器就是通过的里面所说的IOC(依赖注入)后来叫做DI(控制反转)来实现的。至于注入方法,可以通过Spring的配置文件中配置bean,也可以通过注解的方法,这个不说了。然后写个单元测试类看看是否成功。

到这里,我们Spring整合Hibernate就基本算完成了,整合完后给我们带来了哪些好处呢?我明显感觉到以前我在用Hibernate写dao实现层的代码和现在整合后的对比,就能看出简化了不少,从session工厂得到session、开启事务、关闭事务等等重复繁琐的代码都没有了,全交给Spring来为我们完成,可读性提高了。这一切的实现,还得来源AOP的强大,说起AOP,让我想起我们J2EE方向的两个同学,他们学习能力都能强,比我们学的东西多多了,在我还不知道什么是AOP的时候他们已经学完了Spring。当王玺学完AOP后,高调的对所有人说:妈蛋!AOP简直就是为我而生的!太尼玛强大了!当杨开睿学完AOP后,每遇见一个同学,就问他你知道什么是AOP吗?不知道啊?来来,让我拿张纸出来给你讲讲什么是AOP。当时感觉他们两个人对AOP疯狂的着了魔,我就对这门技术充满了期待。。。= =!感觉扯远了,言归正传。说到AOP,这是一种面对切面编程的思想,它底层的实现是依靠JAVA强大的动态代理,说起动态代理,那就要回到几个月前的暑假苦逼的我从学习威哥JAVASE开始讲起,那时的我,哎,大二结束了什么编程知识都没学到,都怪撸啊撸毁我一年啊。想想马上大三醒悟过来开始下定决定好好学习JAVA,暑假的两个月我没回家待在学校每天早8晚9的刻苦跟着威哥视频学习JAVA。。。。。。。。尼玛又扯远了~~~~管他的,反正写完也没多少人看,就当我自言自语吧  = =!反正那个时候学到动态代理一看什么handler啊,匿名内部类啊把我头都整晕了,后来我就多花时间去搞这个动态代理,反正我学得很慢,那两个月每天学习的时间那是相当多的,暑假一完我才学完视频里的JAVASE和一半的JAVAWeb,但是现在回过头想想,没有那辛苦的两个月入门,现在又怎么会在J2EE这条道路上走下去呢。。。。继续哈,后来学了动态代理,现在理解起来AOP就让我轻松了许多。事实证明啊,我们在学习的道路上,是不容易一帆风顺的,前方总会有坎坷与山峰,别走得太快,停下来解决完困难后再前行,不能为了追求速度,而忽略了学习的本质,那就是理解。说到这里我要感谢我的隔壁室友杨开睿,他是一个很有天赋的人也很努力的人,我从他身上看到做我们这一行的,我们要学习的是技术,而不是使用技术的方法,所以他对底层非常熟悉,我相信他也是花了很多时间和精力去各种查资料的。对了,http://edu.51cto.com/lesson/id-37009.html 这是我学习尚硅谷的Spring的视频连接。哦还有,我个人觉得我们每学习一种有视频教学的技术后,用上一段时间后,然后再回到书本上去吸收它的根本会达到事半功倍的效果。如果学习一种技术,一开始就抱着书来看的话,不管你困不困,反正我是要看睡着的。

好了,现在该是Spring整合Struts2了。首先,

1、对了我刚刚写加入的jar包的步骤,加入Hibernate和Spring的jar包,现在加入Struts2的jar包

2、在web.xml中加入Struts2的核心过滤器


3、在web.xml中加入Spring的监听器配置和Spring核心配置文件所在路径。


这里的 * 是因为我是用配置文件的方式用来注入dao、service、action的类,我写在另一个Spring的配置文件中的,让服务器启动的时候去加载所有的applicationContext*文件

好了,说到这里,我是这一篇经验分享的帖,也是一篇求助帖。我遇到一个超级奇葩的BUG,当我启动服务器的时候,总会报一个找不到【Spring/applicationContext.xml】的错误,我根本就没有Spring这个文件包啊,我也查了一些资料说其实这里的<context-param>可以不写,那么tomcat启动的时候就会在默认的WEB-INF下去找,那我也试了试把applicationContext.xml放在了WEB-INF下,然后参数配置代码删了或者直接写成/WEB-INF/allicationConext.xml都还是会报找不到【Spring/applicationContext.xml】的错误
。在启动了十几次后无论怎么改,都是报这个错误。后来我找了我们班最6的两个人还是没找出来,就这个问题困扰了我一天,第二天去实验室找了我们老师还是没发现原因,他让我把工程打包发他邮箱回去试试。中午回到寝室我就在怀疑是不是我用的IDE的问题,毕竟我用的破解版Myeclipse,然后我就抱着试一试的心态把工程放到Eclipse上跑一下,,成功了,在Eclipse居然就没报错。然后我同时开启Myeclipse运行,也成功了!!!!这个问题奇不奇葩?后来我把Eclipse和Myeclipse都关了,重新只开Myeclipse。结果。。。。没报错!就这样神奇的BUG的不在了~~看看有木有人跟我出现过一样的BUG

第二个奇葩错误,既然服务器没报错了,我就测试了一下Struts2。结果一直报我的namespace=“/” 有错,我把命名空间删了或者改名字都报同样的错,仔细一看,下面还有一个不能实例化employeeDao的错误,难道我dao、service、action没有注入到IOC容器中吗,我又换了注解的方式来注入结果就成功了。我纳闷就又换回xml注入,这次把两个xml写在一起,结果还是报错。目前为止我就只有用注解的方式来注入,这是为神魔啊为神魔?我就想知道是我错了还是又是BUG,那我错又是错在哪里?虽然现在用注解来注入是主流,但这个问题终究他是个问题啊~~看有木有人帮我分析分析哪里出错了。


=====以上是我一些整合SSH的学习经验分享和问题求助希望大家指正,虽然我知道我的这个处女博客是没人看的ㄟ(▔︵▔ㄟ)=====


0 0