基于spring2.5的采用xml配置的spring mvc项目
注:本项目全部基于xml配置。同时,集成了hibernate。采用的是:spring
mvc+hibernate+spring的开发架构。
1. 建立web项目
2. 导入jar包(spring.jar, spring-webmvc.jar,
commons-logging.jar。其他jar包为hibernate相关jar包)

上面是springmvc的所有包,我将这些jar包放在了我的百度云盘中,当然你也可以去百度搜索,下面就是正文了。。。。
?下面我们先配置web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<code><?</code><code>xml</code>
<code>version</code><code>=</code><code>"1.0"</code>
<code>encoding</code><code>=</code><code>"utf-8"</code><code>?></code>
<code><</code><code>web-app</code>
<code>version</code><code>=</code><code>"2.5"</code>
<code> </code><code>xmlns</code><code>=</code><code>""</code>
<code> </code><code>xmlns:xsi</code><code>=</code><code>""</code>
<code> </code><code>xsi:schemalocation="</code>
<code> </code><code>">></code>
<code> </code><code><</code><code>servlet</code><code>></code>
<code> </code><code><</code><code>servlet-name</code><code>>dispatcherservlet</</code><code>servlet-name</code><code>></code>
<code> </code><code><</code><code>servlet-class</code><code>></code>
<code> </code><code>org.springframework.web.servlet.dispatcherservlet</code>
<code> </code><code></</code><code>servlet-class</code><code>></code>
<code> </code><code><</code><code>init-param</code><code>></code>
<code> </code><code><</code><code>param-name</code><code>>contextconfiglocation</</code><code>param-name</code><code>></code>
<code> </code><code><</code><code>param-value</code><code>>/web-inf/hib-config.xml,/web-inf/web-config.xml,/web-inf/service-config.xml,/web-inf/dao-config.xml</</code><code>param-value</code><code>></code>
<code> </code><code></</code><code>init-param</code><code>></code>
<code> </code><code><</code><code>load-on-startup</code><code>>1</</code><code>load-on-startup</code><code>></code>
<code> </code><code></</code><code>servlet</code><code>></code>
<code> </code><code><</code><code>servlet-mapping</code><code>></code>
<code> </code><code><</code><code>url-pattern</code><code>>*.do</</code><code>url-pattern</code><code>></code>
<code> </code><code></</code><code>servlet-mapping</code><code>></code>
<code></</code><code>web-app</code><code>></code>
配置说明:
核心控制器为org.springframework.web.servlet.dispatcherservlet
然后就是控制的是*.do的进行过滤,这些和struts2的其实是一样的。
然后就是<init-param>里面的是spring的配置文件
<code><</code><code>load-on-startup</code><code>>项目被加载的时候就启动他的初始化方法</code>
<code>这里的配置文件web-config.xml其实和struts2-config.xml一样的作用</code>
下面介绍web-config.xml文件
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<code><</code><code>beans</code>
<code>xmlns</code><code>=</code><code>""</code>
<code></code>
<code>"></code>
<code> </code>
<code> </code><code><!-- controller方法调用规则定义 --></code>
<code> </code><code><</code><code>bean</code>
<code>id</code><code>=</code><code>"paramethodresolver"</code>
<code> </code><code>class</code><code>=</code><code>"org.springframework.web.servlet.mvc.multiaction.parametermethodnameresolver"</code><code>></code>
<code> </code><code><</code><code>property</code>
<code>name</code><code>=</code><code>"paramname"</code>
<code>value</code><code>=</code><code>"action"</code><code>/></code>
<code>name</code><code>=</code><code>"defaultmethodname"</code>
<code>value</code><code>=</code><code>"list"</code><code>/></code>
<code> </code><code></</code><code>bean</code><code>></code>
<code> </code>
<code> </code><code><!-- 页面view层基本信息设定 --></code>
<code>id</code><code>=</code><code>"viewresolver"</code>
<code> </code><code>class</code><code>=</code><code>"org.springframework.web.servlet.view.internalresourceviewresolver"</code><code>></code>
<code>name</code><code>=</code><code>"viewclass"</code>
<code> </code><code>value</code><code>=</code><code>"org.springframework.web.servlet.view.jstlview"</code><code>/></code>
<code> </code><code><!--<property name="prefix" value="/myjsp/"/>--></code>
<code>name</code><code>=</code><code>"suffix"</code>
<code>value</code><code>=</code><code>".jsp"</code><code>/></code>
<code><!-- servlet映射列表,所有控制层controller的servlet在这里定义 --></code>
<code>id</code><code>=</code><code>"urlmapping"</code>
<code> </code><code>class</code><code>=</code><code>"org.springframework.web.servlet.handler.simpleurlhandlermapping"</code><code>></code>
<code>name</code><code>=</code><code>"mappings"</code><code>></code>
<code> </code><code><</code><code>props</code><code>></code>
<code> </code><code><</code><code>prop</code>
<code>key</code><code>=</code><code>"user.do"</code><code>>usercontroller</</code><code>prop</code><code>></code>
<code> </code><code></</code><code>props</code><code>></code>
<code> </code><code></</code><code>property</code><code>></code>
<code><</code><code>bean</code>
<code>id</code><code>=</code><code>"usercontroller"</code>
<code>class</code><code>=</code><code>"com.sxt.action.usercontroller"</code><code>></code>
<code> </code><code><</code><code>property</code>
<code>name</code><code>=</code><code>"userservice"</code>
<code>ref</code><code>=</code><code>"userservice"</code><code>></</code><code>property</code><code>></code>
<code></</code><code>bean</code><code>></code>
<code></</code><code>beans</code><code>></code>
view层:包括前缀和后缀,其中后缀是说,我们返回一个如a,则后面就直接是.jsp,直接给你配置a.jsp;前缀的话,如返回的是a,则默认给你添加一个前缀为/myjsp/a.jsp,这些都是默认的
之后是service-config.xml,主要是配置业务逻辑层的bean
<code>id</code><code>=</code><code>"userservice"</code>
<code>class</code><code>=</code><code>"com.sxt.service.userservice"</code><code>></code>
<code>name</code><code>=</code><code>"userdao"</code>
<code>ref</code><code>=</code><code>"userdao"</code><code>></</code><code>property</code><code>></code>
下面是hib-config.xml
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<code> </code><code>xmlns:aop</code><code>=</code><code>""</code>
<code> </code><code>xmlns:tx</code><code>=</code><code>""</code>
<code> </code><code>xmlns:context</code><code>=</code><code>""</code>
<code> </code><code></code>
<code> </code><code></code>
<code> </code><code><</code><code>context:component-scan</code>
<code>base-package</code><code>=</code><code>"com.sxt"</code><code>/> </code>
<code> </code><code><!-- 支持aop注解 --></code>
<code> </code><code><</code><code>aop:aspectj-autoproxy</code>
<code>/></code>
<code> </code>
<code>id</code><code>=</code><code>"datasource"</code>
<code> </code><code>class</code><code>=</code><code>"org.apache.commons.dbcp.basicdatasource"</code><code>> </code>
<code> </code><code><</code><code>property</code>
<code>name</code><code>=</code><code>"driverclassname"</code>
<code> </code><code>value</code><code>=</code><code>"com.mysql.jdbc.driver"</code><code>> </code>
<code> </code><code></</code><code>property</code><code>> </code>
<code>name</code><code>=</code><code>"url"</code>
<code>value</code><code>=</code><code>"jdbc:"</code><code>></</code><code>property</code><code>> </code>
<code>name</code><code>=</code><code>"username"</code>
<code>value</code><code>=</code><code>"root"</code><code>></</code><code>property</code><code>> </code>
<code>name</code><code>=</code><code>"password"</code>
<code>value</code><code>=</code><code>"123456"</code><code>></</code><code>property</code><code>></code>
<code> </code><code></</code><code>bean</code><code>> </code>
<code> </code><code><</code><code>bean</code>
<code>id</code><code>=</code><code>"sessionfactory"</code>
<code> </code><code>class</code><code>=</code><code>"org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean"</code><code>> </code>
<code> </code><code><</code><code>property</code>
<code>name</code><code>=</code><code>"datasource"</code><code>> </code>
<code> </code><code><</code><code>ref</code>
<code>bean</code><code>=</code><code>"datasource"</code>
<code>/> </code>
<code> </code><code></</code><code>property</code><code>></code>
<code>name</code><code>=</code><code>"hibernateproperties"</code><code>> </code>
<code> </code><code><</code><code>props</code><code>> </code>
<code> </code><code><!-- key的名字前面都要加hibernate. --></code>
<code> </code><code><</code><code>prop</code>
<code>key</code><code>=</code><code>"hibernate.dialect"</code><code>> </code>
<code> </code><code>org.hibernate.dialect.mysqldialect </code>
<code> </code><code></</code><code>prop</code><code>> </code>
<code>key</code><code>=</code><code>"hibernate.show_sql"</code><code>>true</</code><code>prop</code><code>></code>
<code>key</code><code>=</code><code>"hibernate.hbm2ddl.auto"</code><code>>update</</code><code>prop</code><code>></code>
<code> </code><code></</code><code>props</code><code>></code>
<code>name</code><code>=</code><code>"packagestoscan"</code><code>></code>
<code> </code><code><</code><code>value</code><code>>com.sxt.po</</code><code>value</code><code>></code>
<code> </code><code></</code><code>bean</code><code>> </code>
<code>id</code><code>=</code><code>"hibernatetemplate"</code>
<code>class</code><code>=</code><code>"org.springframework.orm.hibernate3.hibernatetemplate"</code>
<code>></code>
<code>name</code><code>=</code><code>"sessionfactory"</code>
<code>ref</code><code>=</code><code>"sessionfactory"</code><code>></</code><code>property</code><code>></code>
<code><!--配置一个jdbctemplate实例--></code>
<code>id</code><code>=</code><code>"jdbctemplate"</code>
<code>class</code><code>=</code><code>"org.springframework.jdbc.core.jdbctemplate"</code><code>> </code>
<code> </code><code><</code><code>property</code>
<code>name</code><code>=</code><code>"datasource"</code>
<code>ref</code><code>=</code><code>"datasource"</code><code>/> </code>
<code></</code><code>bean</code><code>> </code>
<code><!-- 配置事务管理 --></code>
<code>id</code><code>=</code><code>"txmanager"</code>
<code>class</code><code>=</code><code>"org.springframework.orm.hibernate3.hibernatetransactionmanager"</code>
<code><</code><code>tx:annotation-driven</code>
<code>transaction-manager</code><code>=</code><code>"txmanager"</code>
<code><</code><code>aop:config</code><code>></code>
<code> </code><code><</code><code>aop:pointcut</code>
<code>expression</code><code>=</code><code>"execution(public * com.sxt.service.impl.*.*(..))"</code>
<code>id</code><code>=</code><code>"businessservice"</code><code>/></code>
<code> </code><code><</code><code>aop:advisor</code>
<code>advice-ref</code><code>=</code><code>"txadvice"</code>
<code>pointcut-ref</code><code>=</code><code>"businessservice"</code>
<code></</code><code>aop:config</code><code>></code>
<code><</code><code>tx:advice</code>
<code>id</code><code>=</code><code>"txadvice"</code>
<code> </code><code><</code><code>tx:attributes</code><code>></code>
<code> </code><code><</code><code>tx:method</code>
<code>name</code><code>=</code><code>"find*"</code>
<code>read-only</code><code>=</code><code>"true"</code>
<code>propagation</code><code>=</code><code>"not_supported"</code>
<code> </code><code><!-- get开头的方法不需要在事务中运行 。</code>
<code> </code><code>有些情况是没有必要使用事务的,比如获取数据。开启事务本身对性能是有一定的影响的--></code>
<code>name</code><code>=</code><code>"*"</code><code>/> </code><code><!-- 其他方法在实务中运行 --></code>
<code> </code><code></</code><code>tx:attributes</code><code>></code>
<code></</code><code>tx:advice</code><code>></code>
dao-config.xml
<code>id</code><code>=</code><code>"userdao"</code>
<code>class</code><code>=</code><code>"com.sxt.dao.userdao"</code><code>></code>
<code> </code><code><</code><code>property</code>
<code>name</code><code>=</code><code>"hibernatetemplate"</code>
<code>ref</code><code>=</code><code>"hibernatetemplate"</code><code>></</code><code>property</code><code>></code>
包的结构为下面:
user.java
<code>package</code>
<code>com.sxt.po;</code>
<code>import</code>
<code>javax.persistence.entity;</code>
<code>javax.persistence.generatedvalue;</code>
<code>javax.persistence.generationtype;</code>
<code>javax.persistence.id;</code>
<code>@entity</code>
<code>public</code>
<code>class</code> <code>user {</code>
<code> </code><code>@id</code>
<code> </code><code>@generatedvalue</code><code>(strategy=generationtype.auto)</code>
<code> </code><code>private</code>
<code>int</code>
<code>id;</code>
<code>string uname;</code>
<code> </code><code>public</code>
<code>int</code> <code>getid() {</code>
<code> </code><code>return</code>
<code> </code><code>}</code>
<code>void</code> <code>setid(</code><code>int</code>
<code>id) {</code>
<code> </code><code>this</code><code>.id = id;</code>
<code>string getuname() {</code>
<code>uname;</code>
<code>void</code> <code>setuname(string uname) {</code>
<code> </code><code>this</code><code>.uname = uname;</code>
<code>}</code>
userdao.java
<code>com.sxt.dao;</code>
<code>org.springframework.orm.hibernate3.hibernatetemplate;</code>
<code>com.sxt.po.user;</code>
<code>class</code> <code>userdao {</code>
<code>hibernatetemplate hibernatetemplate;</code>
<code>void</code> <code>add(user u){</code>
<code> </code><code>system.out.println(</code><code>"userdao.add()"</code><code>);</code>
<code> </code><code>hibernatetemplate.save(u);</code>
<code>hibernatetemplate gethibernatetemplate() {</code>
<code>hibernatetemplate;</code>
<code>void</code> <code>sethibernatetemplate(hibernatetemplate hibernatetemplate) {</code>
<code> </code><code>this</code><code>.hibernatetemplate = hibernatetemplate;</code>
userservice.java
<code>com.sxt.service;</code>
<code>com.sxt.dao.userdao;</code>
<code>class</code> <code>userservice {</code>
<code>userdao userdao;</code>
<code>void</code> <code>add(string uname){</code>
<code> </code><code>system.out.println(</code><code>"userservice.add()"</code><code>);</code>
<code> </code><code>user u =</code><code>new</code>
<code>user();</code>
<code> </code><code>u.setuname(uname);</code>
<code> </code><code>userdao.add(u);</code>
<code>userdao getuserdao() {</code>
<code>userdao;</code>
<code>void</code> <code>setuserdao(userdao userdao) {</code>
<code> </code><code>this</code><code>.userdao = userdao;</code>
<code><b>usercontroller.java 这里一般是叫controller,而且是实现controller接口 我们可以看见接口controller的实现是怎样的</b></code>
<code><b>其实controller是实现的httpservletrequest和httpservletresponse方法,很像servlet一样。 modelandview是mvc中的m和v就是数据和视图,比如我们跳转到ok.jsp中有页面还得有数据。</b></code>
<code>com.sxt.action;</code>
<code>javax.servlet.http.httpservletrequest;</code>
<code>javax.servlet.http.httpservletresponse;</code>
<code>org.springframework.web.servlet.modelandview;</code>
<code>org.springframework.web.servlet.mvc.controller;</code>
<code>com.sxt.service.userservice;</code>
<code>class</code> <code>usercontroller</code><code>implements</code>
<code>controller {</code>
<code>userservice userservice;</code>
<code> </code><code>@override</code>
<code>modelandview handlerequest(httpservletrequest req,</code>
<code> </code><code>httpservletresponse resp)</code><code>throws</code>
<code>exception {</code>
<code> </code><code>system.out.println(</code><code>"hellocontroller.handlerequest()"</code><code>);</code>
<code> </code><code>req.setattribute(</code><code>"a"</code><code>,</code><code>"aaaa"</code><code>);</code>
<code> </code><code>userservice.add(req.getparameter(</code><code>"uname"</code><code>));</code>
<code>new</code> <code>modelandview(</code><code>"index"</code><code>);</code>
<code>userservice getuserservice() {</code>
<code>userservice;</code>
<code>void</code> <code>setuserservice(userservice userservice) {</code>
<code> </code><code>this</code><code>.userservice = userservice;</code>
<code><b>controller层中我们返回的是new modelandview("index");这就对应我们之前说的前缀和后缀的问题,这里就会跳转到index.jsp中</b></code>
。
结果:数据库中增加zhangsan的记录。页面跳转到index.jsp上,显示: