基于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上,顯示: