天天看點

SpringMVC輕松學習-環境搭建(二)

基于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輕松學習-環境搭建(二)

上面是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>&lt;?</code><code>xml</code>

<code>version</code><code>=</code><code>"1.0"</code>

<code>encoding</code><code>=</code><code>"utf-8"</code><code>?&gt;</code>

<code>&lt;</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>"&gt;&gt;</code>

<code>    </code><code>&lt;</code><code>servlet</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>servlet-name</code><code>&gt;dispatcherservlet&lt;/</code><code>servlet-name</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>servlet-class</code><code>&gt;</code>

<code>            </code><code>org.springframework.web.servlet.dispatcherservlet</code>

<code>        </code><code>&lt;/</code><code>servlet-class</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>init-param</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>param-name</code><code>&gt;contextconfiglocation&lt;/</code><code>param-name</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>param-value</code><code>&gt;/web-inf/hib-config.xml,/web-inf/web-config.xml,/web-inf/service-config.xml,/web-inf/dao-config.xml&lt;/</code><code>param-value</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>init-param</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>load-on-startup</code><code>&gt;1&lt;/</code><code>load-on-startup</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>servlet</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>servlet-mapping</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>url-pattern</code><code>&gt;*.do&lt;/</code><code>url-pattern</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>servlet-mapping</code><code>&gt;</code>

<code>&lt;/</code><code>web-app</code><code>&gt;</code>

配置說明:

核心控制器為org.springframework.web.servlet.dispatcherservlet

然後就是控制的是*.do的進行過濾,這些和struts2的其實是一樣的。

然後就是&lt;init-param&gt;裡面的是spring的配置檔案

<code>&lt;</code><code>load-on-startup</code><code>&gt;項目被加載的時候就啟動他的初始化方法</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>&lt;</code><code>beans</code>

<code>xmlns</code><code>=</code><code>""</code>

<code></code>

<code>"&gt;</code>

<code>    </code> 

<code>    </code><code>&lt;!-- controller方法調用規則定義 --&gt;</code>

<code>    </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code>

<code>name</code><code>=</code><code>"paramname"</code>

<code>value</code><code>=</code><code>"action"</code><code>/&gt;</code>

<code>name</code><code>=</code><code>"defaultmethodname"</code>

<code>value</code><code>=</code><code>"list"</code><code>/&gt;</code>

<code>    </code><code>&lt;/</code><code>bean</code><code>&gt;</code>

<code>  </code> 

<code>   </code><code>&lt;!-- 頁面view層基本資訊設定 --&gt;</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>&gt;</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>/&gt;</code>

<code>        </code><code>&lt;!--&lt;property name="prefix" value="/myjsp/"/&gt;--&gt;</code>

<code>name</code><code>=</code><code>"suffix"</code>

<code>value</code><code>=</code><code>".jsp"</code><code>/&gt;</code>

<code>&lt;!-- servlet映射清單,所有控制層controller的servlet在這裡定義 --&gt;</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>&gt;</code>

<code>name</code><code>=</code><code>"mappings"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>props</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>prop</code>

<code>key</code><code>=</code><code>"user.do"</code><code>&gt;usercontroller&lt;/</code><code>prop</code><code>&gt;</code>

<code>            </code><code>&lt;/</code><code>props</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>property</code><code>&gt;</code>

<code>&lt;</code><code>bean</code>

<code>id</code><code>=</code><code>"usercontroller"</code>

<code>class</code><code>=</code><code>"com.sxt.action.usercontroller"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>property</code>

<code>name</code><code>=</code><code>"userservice"</code>

<code>ref</code><code>=</code><code>"userservice"</code><code>&gt;&lt;/</code><code>property</code><code>&gt;</code>

<code>&lt;/</code><code>bean</code><code>&gt;</code>

<code>&lt;/</code><code>beans</code><code>&gt;</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>&gt;</code>

<code>name</code><code>=</code><code>"userdao"</code>

<code>ref</code><code>=</code><code>"userdao"</code><code>&gt;&lt;/</code><code>property</code><code>&gt;</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>&lt;</code><code>context:component-scan</code> 

<code>base-package</code><code>=</code><code>"com.sxt"</code><code>/&gt;  </code>

<code>    </code><code>&lt;!-- 支援aop注解 --&gt;</code>

<code>    </code><code>&lt;</code><code>aop:aspectj-autoproxy</code>

<code>/&gt;</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>&gt; </code>

<code>            </code><code>&lt;</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>&gt; </code>

<code>            </code><code>&lt;/</code><code>property</code><code>&gt; </code>

<code>name</code><code>=</code><code>"url"</code>

<code>value</code><code>=</code><code>"jdbc:"</code><code>&gt;&lt;/</code><code>property</code><code>&gt; </code>

<code>name</code><code>=</code><code>"username"</code>

<code>value</code><code>=</code><code>"root"</code><code>&gt;&lt;/</code><code>property</code><code>&gt; </code>

<code>name</code><code>=</code><code>"password"</code>

<code>value</code><code>=</code><code>"123456"</code><code>&gt;&lt;/</code><code>property</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>bean</code><code>&gt; </code>

<code>   </code><code>&lt;</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>&gt; </code>

<code>           </code><code>&lt;</code><code>property</code>

<code>name</code><code>=</code><code>"datasource"</code><code>&gt; </code>

<code>               </code><code>&lt;</code><code>ref</code>

<code>bean</code><code>=</code><code>"datasource"</code>

<code>/&gt; </code>

<code>           </code><code>&lt;/</code><code>property</code><code>&gt;</code>

<code>name</code><code>=</code><code>"hibernateproperties"</code><code>&gt; </code>

<code>               </code><code>&lt;</code><code>props</code><code>&gt; </code>

<code>                </code><code>&lt;!-- key的名字前面都要加hibernate. --&gt;</code>

<code>                   </code><code>&lt;</code><code>prop</code>

<code>key</code><code>=</code><code>"hibernate.dialect"</code><code>&gt; </code>

<code>                       </code><code>org.hibernate.dialect.mysqldialect </code>

<code>                   </code><code>&lt;/</code><code>prop</code><code>&gt; </code>

<code>key</code><code>=</code><code>"hibernate.show_sql"</code><code>&gt;true&lt;/</code><code>prop</code><code>&gt;</code>

<code>key</code><code>=</code><code>"hibernate.hbm2ddl.auto"</code><code>&gt;update&lt;/</code><code>prop</code><code>&gt;</code>

<code>               </code><code>&lt;/</code><code>props</code><code>&gt;</code>

<code>name</code><code>=</code><code>"packagestoscan"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>value</code><code>&gt;com.sxt.po&lt;/</code><code>value</code><code>&gt;</code>

<code>   </code><code>&lt;/</code><code>bean</code><code>&gt; </code>

<code>id</code><code>=</code><code>"hibernatetemplate"</code>

<code>class</code><code>=</code><code>"org.springframework.orm.hibernate3.hibernatetemplate"</code>

<code>&gt;</code>

<code>name</code><code>=</code><code>"sessionfactory"</code>

<code>ref</code><code>=</code><code>"sessionfactory"</code><code>&gt;&lt;/</code><code>property</code><code>&gt;</code>

<code>&lt;!--配置一個jdbctemplate執行個體--&gt;</code> 

<code>id</code><code>=</code><code>"jdbctemplate"</code> 

<code>class</code><code>=</code><code>"org.springframework.jdbc.core.jdbctemplate"</code><code>&gt;  </code>

<code>     </code><code>&lt;</code><code>property</code>

<code>name</code><code>=</code><code>"datasource"</code>

<code>ref</code><code>=</code><code>"datasource"</code><code>/&gt;  </code>

<code>&lt;/</code><code>bean</code><code>&gt; </code>

<code>&lt;!-- 配置事務管理 --&gt;</code>

<code>id</code><code>=</code><code>"txmanager"</code>

<code>class</code><code>=</code><code>"org.springframework.orm.hibernate3.hibernatetransactionmanager"</code>

<code>&lt;</code><code>tx:annotation-driven</code>

<code>transaction-manager</code><code>=</code><code>"txmanager"</code>

<code>&lt;</code><code>aop:config</code><code>&gt;</code>

<code>    </code><code>&lt;</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>/&gt;</code>

<code>    </code><code>&lt;</code><code>aop:advisor</code>

<code>advice-ref</code><code>=</code><code>"txadvice"</code>

<code>pointcut-ref</code><code>=</code><code>"businessservice"</code>

<code>&lt;/</code><code>aop:config</code><code>&gt;</code>

<code>&lt;</code><code>tx:advice</code>

<code>id</code><code>=</code><code>"txadvice"</code>

<code>    </code><code>&lt;</code><code>tx:attributes</code><code>&gt;</code>

<code>        </code><code>&lt;</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>&lt;!-- get開頭的方法不需要在事務中運作 。</code>

<code>        </code><code>有些情況是沒有必要使用事務的,比如擷取資料。開啟事務本身對性能是有一定的影響的--&gt;</code>

<code>name</code><code>=</code><code>"*"</code><code>/&gt;   </code><code>&lt;!-- 其他方法在實務中運作 --&gt;</code>

<code>    </code><code>&lt;/</code><code>tx:attributes</code><code>&gt;</code>

<code>&lt;/</code><code>tx:advice</code><code>&gt;</code>

dao-config.xml

<code>id</code><code>=</code><code>"userdao"</code>

<code>class</code><code>=</code><code>"com.sxt.dao.userdao"</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>property</code>

<code>name</code><code>=</code><code>"hibernatetemplate"</code>

<code>ref</code><code>=</code><code>"hibernatetemplate"</code><code>&gt;&lt;/</code><code>property</code><code>&gt;</code>

包的結構為下面:

SpringMVC輕松學習-環境搭建(二)

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>

SpringMVC輕松學習-環境搭建(二)

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

SpringMVC輕松學習-環境搭建(二)