表现层用struts+freemarker,业务层用spring,hibernate处理持久层。在struts中,利用委托,将action的处理委托给spring进行,struts只负责页面逻辑。
前些日子下了Eclipse 3.2+MyEclipse5.0M2,感觉MyEclipse一些东西还是不错的,就用它来做个整合。
首先,建立一个web project:
然后,给新建立的项目附加上struts的一些文件:
完成后项目结构如下:
接着加入hibernate需要的文件:
完成后项目结构为:
再加入spring的文件:
注意下面的选择:
完成后可以看到:
打开那个applicationContext.xml,将
改为:
现在还需要做一些修改,才能在运行的时候不报错,我以前也写过struts+hibernate的时候,会抛一个错,之所以是由于hibernate包含的那个xerces.jar,所以现在直接把它给删掉,没什么问题。
在spring和hibernate那,有2个log4j.jar,老版本不好用,所以删除,换一个新版本。
删除
和
,换上
,然后,在src下加入一个log4j.properties:
内容如下:
这样log4j就配好了。
接下来是加入FreeMarker,jsp比不上,个人感觉。
先下一个freemarker.jar
,加到WEB-INF下的lib目录,然后,打开web.xml,加入如下内容:
下面来点实战演习。
切换到MyEclipse的hibernate视图。
打开数据库连接:
然后,执行
自动生成几个文件:
并且,spring的applicationContext.xml自动加入
然后,建立ftl页面,根据前面web.xml配置的freemarker设置,需要建立如下目录
先把页面逻辑处理下,打开struts-config.xml,然后进行如下操作
继续加
完成后效果如下:
下面是3个页面:
这里注意下前2行,在freemarker中用struts标签。
前面说过action委托给spring做,许要在struts那加入
然后,action类需要修改下
下面的setter是为spring准备的。
struts配置那的action声明需要修改一下,说明用代理:
然后在spring的applicationContext.xml加上:
注意是用name,不是id。
发布,运行,结果抛了个错
还好,问题不大,找到
加到WEB-INF/lib下就可以了。
开始测试
成功的话:
否则:
然后去数据库一看,郁闷,数据没进来,试了N久,最后发现spring里要定义个dataSource。原来sessionFactory的定义变为如下:
前些日子下了Eclipse 3.2+MyEclipse5.0M2,感觉MyEclipse一些东西还是不错的,就用它来做个整合。
首先,建立一个web project:
![](https://i-blog.csdnimg.cn/blog_migrate/fa193ce4435642f9d162db23e9ddbe85.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0beb1d395c2fcfe39e494e014a10ea68.jpeg)
然后,给新建立的项目附加上struts的一些文件:
![](https://i-blog.csdnimg.cn/blog_migrate/7c93e0b76634368c838aa4564f5b096f.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/2af39a15bd06171423ff1a212f385369.jpeg)
完成后项目结构如下:
![](https://i-blog.csdnimg.cn/blog_migrate/da212b0101217985f2b8333eaebfb25e.jpeg)
接着加入hibernate需要的文件:
![](https://i-blog.csdnimg.cn/blog_migrate/eae61b0a6d9894f605a2e83bc1b9a908.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/df8e3306d881abf1854ea4fb51bbdf35.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c07bfb26ef7cafb2322d92f6ccb44d3f.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b6d0ddfd95f9edcfd974eb4a9f86d560.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/81b8aedd41f89174a01ee1aecda117e4.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/17b804249ad39b4cfdc8f84276de43b9.jpeg)
完成后项目结构为:
![](https://i-blog.csdnimg.cn/blog_migrate/b324d8926ad4a27457ddcadfbfbaf464.jpeg)
再加入spring的文件:
![](https://i-blog.csdnimg.cn/blog_migrate/2856d1f84852e636e0684ba30942dcf5.jpeg)
注意下面的选择:
![](https://i-blog.csdnimg.cn/blog_migrate/e629bd76cc6ee41c58d87f5866e0ce74.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/684bacf76f180da530bec0155946c346.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/3482033831b350e9ccd472fc1a1cb8f9.jpeg)
完成后可以看到:
![](https://i-blog.csdnimg.cn/blog_migrate/fb502e1697ed7547711e9a7110132bda.jpeg)
打开那个applicationContext.xml,将
![](https://i-blog.csdnimg.cn/blog_migrate/7dbc3920daa948659bf442d532395aa5.jpeg)
改为:
![](https://i-blog.csdnimg.cn/blog_migrate/a507e4fc6779db19258dde8836f2ca0b.jpeg)
现在还需要做一些修改,才能在运行的时候不报错,我以前也写过struts+hibernate的时候,会抛一个错,之所以是由于hibernate包含的那个xerces.jar,所以现在直接把它给删掉,没什么问题。
![](https://i-blog.csdnimg.cn/blog_migrate/52b6de8e3e104162a82b94eab210dd07.jpeg)
在spring和hibernate那,有2个log4j.jar,老版本不好用,所以删除,换一个新版本。
删除
![](https://i-blog.csdnimg.cn/blog_migrate/70e939c56eda591f43c6d3ecf3e90040.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c0914aaf9594d5828f7f6b5af85e4dda.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/d7856584c171b5cff6345af7d07dcd81.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8679efbfb41e813b099fbc0c281e414e.jpeg)
内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/bc232a8ec1a345137de1e3e05677a869.jpeg)
这样log4j就配好了。
接下来是加入FreeMarker,jsp比不上,个人感觉。
先下一个freemarker.jar
![](https://i-blog.csdnimg.cn/blog_migrate/976f5f13d6077607d6aaf7a319287948.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/30a0e40ff2ae38151ed6926605d1585b.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/719f930880d391c2d2638f926cdd3ad6.jpeg)
下面来点实战演习。
切换到MyEclipse的hibernate视图。
![](https://i-blog.csdnimg.cn/blog_migrate/9155ef1026fec6139221b9952606d2e9.jpeg)
打开数据库连接:
![](https://i-blog.csdnimg.cn/blog_migrate/6701ef7b7c8d65a006e89d5a5c760f0e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/f4437fd4acc3ac148b1e028f48fdb7e1.jpeg)
然后,执行
![](https://i-blog.csdnimg.cn/blog_migrate/aa2501b0fafe92e4d884b7942f9c361b.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/60cd866dd4f0915f7993f958ca9d4d8e.jpeg)
自动生成几个文件:
![](https://i-blog.csdnimg.cn/blog_migrate/3fb2dd4446ad674d88a51dafe79571ff.jpeg)
并且,spring的applicationContext.xml自动加入
![](https://i-blog.csdnimg.cn/blog_migrate/8e5582d80d8b0fde3d10394005f7278a.jpeg)
然后,建立ftl页面,根据前面web.xml配置的freemarker设置,需要建立如下目录
![](https://i-blog.csdnimg.cn/blog_migrate/1bb39653e1defc99d0b6f3afb4bec642.jpeg)
先把页面逻辑处理下,打开struts-config.xml,然后进行如下操作
![](https://i-blog.csdnimg.cn/blog_migrate/43b2c31b808720a0d8f7054ca4acf38f.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0aa1ca4022b3b88187f5e1e92a03fab7.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/07e2ee368afd47b51936d2122dcea849.jpeg)
继续加
![](https://i-blog.csdnimg.cn/blog_migrate/8bf234e7e78f671b638ba13b82b6d4f4.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/23543a441ec54f26dd8da724fecba4d8.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/0afbc7b9783920f991de40676960ad98.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/bae91c91627aefa56c60e6a817530540.jpeg)
完成后效果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/66a4e8955787095164ad6be525639e51.jpeg)
下面是3个页面:
![](https://i-blog.csdnimg.cn/blog_migrate/d5bf1f41708dc88e68bb194aca9387b8.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/42ac81b3d7f4a93ead8e4f5f87c2d0dd.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/7d41484a9ee9fc2f6c8b0a1aab36f208.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/70487c116b21892e65afb3367704c922.jpeg)
这里注意下前2行,在freemarker中用struts标签。
前面说过action委托给spring做,许要在struts那加入
![](https://i-blog.csdnimg.cn/blog_migrate/dfb62803fba5f6f75fa3e173f5f848db.jpeg)
然后,action类需要修改下
![](https://i-blog.csdnimg.cn/blog_migrate/58b34e8c6c854c0cfbb8998d6d8b103f.jpeg)
下面的setter是为spring准备的。
struts配置那的action声明需要修改一下,说明用代理:
![](https://i-blog.csdnimg.cn/blog_migrate/9122bca5ada40b3847fc1f92aba1b6dc.jpeg)
然后在spring的applicationContext.xml加上:
![](https://i-blog.csdnimg.cn/blog_migrate/42e0490fca7f4eec65ede0ad828ad03d.jpeg)
注意是用name,不是id。
发布,运行,结果抛了个错
![](https://i-blog.csdnimg.cn/blog_migrate/3f30f43d05f7826173d70116b22ade98.jpeg)
还好,问题不大,找到
![](https://i-blog.csdnimg.cn/blog_migrate/d1c143ec1cc9929dd041ccb7f2ecb7e4.jpeg)
开始测试
![](https://i-blog.csdnimg.cn/blog_migrate/9491a9c9c0adc3e2bb84ffc90589327c.jpeg)
成功的话:
![](https://i-blog.csdnimg.cn/blog_migrate/9984097920862d7f031c11ac153306df.jpeg)
否则:
![](https://i-blog.csdnimg.cn/blog_migrate/155440b5b2353fa278eabef39aacbff5.jpeg)
然后去数据库一看,郁闷,数据没进来,试了N久,最后发现spring里要定义个dataSource。原来sessionFactory的定义变为如下:
![](https://i-blog.csdnimg.cn/blog_migrate/0e34410f5c62f84f2549229daba170d7.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/d86522e41a1c53b89e1ee8cb29d370e3.gif)