天天看点

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轻松学习-环境搭建(二)