--Springmvc快速上手例子_优秀资料_第1页
--Springmvc快速上手例子_优秀资料_第2页
--Springmvc快速上手例子_优秀资料_第3页
--Springmvc快速上手例子_优秀资料_第4页
--Springmvc快速上手例子_优秀资料_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、src:白田 demo.controller庄卜j listarticlecontroller.java 白田 demo.dao 由 国 artidedao.javafr |7 iarticledao.java:白田 demo.modeli 毎 0 artide.java| 由 pi author.java 白田 demo.service庄卜国 articleservice.java;園 con perties1顶目结构ffl- (j persistencej日r 由 spring 日 spects.jar0 spring-webrnvcjar(j-0 spring.jar 0-

2、0 jstljar $-0 standard.jare- 0 antlr-2.7.6.jars- p)aspectjrt.jar aspectjweaver.jar(j cglib-nodep-2.l_3.jar s- q ehcache-1.2.4.jarq hibernate日nnotations.jar hibernatecommons日nncs-h hibernateentitymanager.jarfr-0 hibernate3jarh commonsbeanutils.jarq comm on s-collectio ns.jar 琳口 commonsdbcp.jar ®

3、- u commons-lang.jarh comm on s-logging.jaru comm on s-pool.jarii- pi dom4j-l6.1.jar4)-0 jta.jarn mysql-c onn ector-java-3.1.8-bin .jar2使用到的jar文件spring mvc快速上手例了spring framework可以被使川在很多场合之屮,考虑到目前大多数java ee的项目是b/s 结构的,所以这里的快速上手教程会以spring mvc为切入点,用最简单的代码一步一步来 实现一个图书列表的页而。在正式动手z前需要做些准备工作,先安装并设査好jdk1.5和

4、tomcat 5,关于数据库 及其访问方式可以根据个人习惯进行选择,教程屮使用mysql数据库和hibernate (映射 由hibernate annotation实现)。请将实际使用到的jar文件复制至!j web-inf/lib目录中,整 个项目的结构见图1,教程屮川到的jar文件见图2。白webjnf卜凸lib白 3 modules: 区 applicationcontext-dao,xmlix applicationcontexbservices.xml1p applicationcontext.xml白凸viewi ”® listarticle.jspi国 dispatc

5、her-servletxmli冈 web.xml项冃中的bean定义分散在多个xml文件中,每完成一部分代码就给出相应的配置,授后 再进行整合和部署。配置中使用default-autowire="byname"实现了 bean的口动织入,节 省了很多个工作量,只需注意bean及属性的命名即可。step 1.business objects & dao教程中的例了涉及到两个实体对象,代表文章的article类和代表作者的author类,分別对 应了数据库中的article表和author表,一篇文章有一个作者,而一个作者可以有多篇文章。 类的代码如下(省略getter

6、和setter):代码:article javapackage demo.model;import javax.persistence.*;entity曰出public class article ldgeneratedvalueprivate long id;private string title;manytooneprivate author author;代码:authorjavapackage demo.model;import java.util.list;import javax.persiste nee 广;entity曰田public class author ldgener

7、atedvalueprivate long id;private string name;onetomanyprivate list<article> articles;l在mysql中创建数据表的sql语句如下,数据请自行添加(如果使用hibernate,表可以 根据映射白动牛成,具体做法请参考hibernate文档):代码:数据库创建sqlcreate database 'articles' default character set utf8 collate utf8_ge neral_ci;use articles;create table'arti

8、cle' (id' bigint(20) not null autoncrement,'title' varchar(ioo) not null default ”,'authorjd' bigint(20) not null default o,primary key ('id')engine二mylsam default charset=utf8;create table'author' ('id' bigint(20) not null autoncrement,name' varch

9、ar(ioo) not null default",primary key ('id')engine二mylsam default charset=utf8;考虑到可能会有多种dao的实现,所以在dao层先定义一个larticledao接口,随后可以 自由选择具体的实现方式,此处结介spring的hibernatedaosupport使用hiberna怕来进 行实现:代码:larticledao.javapackage demo.dao;import java.util.list;import demo.model.article;曰田public interface

10、 larticledao public list<article> loadaiiarticles();l代码:articledao.javapackage demo.dao;import java.util.list;import org.springframework.orm.hibernate3.support.hibernatedaosupport;import demo.model.article;曰出public class articledao extends hibernatedaosupport implements larticledao suppresswar

11、 nings(” un checked”)白由 public list<article> loadaiiarticles() return (list<article>)gethibernatetemplate().loadaii(article.class);bl接下来对hibernate进行相应的配置,如果使用了 jdo或者ibatis,请参考spring sc档。applicationcontext-dao.xml 内容如 f:代码:applicationcontext-dao.xml<?xml version=h1.0h encodingutf£

12、?><beansxmlns=n/schema/beansn xmlns:xsi=h/2001/xmlschema-instancehxsi:schemalocatio n=”http:/wwwspringframeworkorg/schema/bea ns /schema/bea ns/spri ngbeans-20xsctdefault-autowire=hbynameh><!- dao配置于此-><bean

13、id=harticledaoh class=ndemo.dao.articledaov><!-数据源-><!-jndi数据源-><!-<bean id=ndatasourcem class=norg.springframework.jndi.jndiobjectfactorybeann><property name=hjndinameh value="$n/></bean><!-jdbc数据源-><bean id=,datasource,f class=h

14、mons.dbcp.basicdatasourcehdestroy-method=hclosefl><property name=”driverclassname” value=n$datasource.jdbc.driverclassnamen /><property name=nurlh value=$datasourcejdbcurl, /><property name=,fusemameh value=h$datasource.jdbc.usernameh /><property name=hpasswordh value=h$datas

15、ource.jdbc.password0 /></bean><!-使用 annotation 映射的 sessionfactory -><bean id=hsessionfactory'1class=horg.springframework.orm.hibernate3.annotation.a nn otatio nsessionfactorybean、<property name=hdatasourcen ref=,datasource,7><property name=,fhibernatepropertiesfl>&l

16、t;props><prop key=llhibernate.dialect,>$hibernate.dialect</prop><prop key=l,hibernate.show_sqr,>$hibernate.show_sql</prop><propkey=hhibernate.cache.use_query_cacheh>$hibemate.cache.use_query_cache</prop> <propkey=mvider_classh>$hiber na

17、vider_classv/prop></props></property><property name=mannotatedclassesu><list><value>demo.model.article</value><value>demo.model.author</value></list></property></bean><!-事务管理器,此处为hibernate的事务竹理器-><bean id=htran

18、sactionmanage广class=norg.springframework.orm.hibernate3.hibernatetra nsactio nman ager'1 /></bea ns>此处如果使用jndi提供数据源,请根据注释进行调整。spring的事务管理需要声明事务管 理器,由于hibernate、jdo、jdbc的事务管理器都不一样,所以将其与其他事务的配置 分开存放。此外,配置中的一些参数使用了山位符(形如$),这些内容将在step 4中进行 加载。step 2.serviceservice层貝是调用dao中的方法为控制器提供图书列表,serv

19、ice最好能先给出接口,随 后进行实现,但此处的功能比较简单,就直接进行实现了:代码:a rticleservice.ja vapackage demo.service;import java.util.list;import demo.da 0articledao;import demo.model.article;曰丄public class articleservice private larticledao articledao;i已由 public list<article> loadaiiarticles() return articledao.loadaiiartic

20、les();卓申 public void setarticledao(iarticledao articledao) this.articledao = articledao;打lspring通过setarticledao方法为articleservice注入dao,也可以选择通过构造方法注入, 2.5中还能用autowired进行注入。applicationcontext-services.xml 内容女ii 卜:代码:applicationcontext-services.xmlv?xml version二”1.0” encoding="utf-8"?><b

21、eansxmlns=n/schema/bea ns”xmlns:xsi=h/2001/xmlschema-instancenxsi:schemalocation=h/schema/beans/schema/beans/spri ngbeans20.xsctdefault-autowire=,bynameh><!- service配置于此-><bean id=harti

22、cleservice,f class=ndemo.service.articleserviceh /></bea ns>step 3.controller & viewspring mvc提供了多种实现控制器的方式,此处直接实现controller接口,开发一个单一动作的简单控制器,从service小取得图书列表,提供给视图进行呈现,listarticlecontroller内容如下:代码:li st a rticlecon troller, ja vapackage demo.controller;import java.util.list;import javax

23、.servlet.http.httpservletrequest;import javax.servlet.http.httpservletresponse;import org.springframework.web.servlet.modelandview;import org.spri ngframework.web.servlet.mvc. controller;import demo.model.article;import demo.service.articleservice;曰创public class listarticlecontroller implements cont

24、roller private articleservice articleservice;&申 public modelandview handlerequest(httpservletrequest request,httpservletresponse response) throws exception list<article> articles = articleservice.loadaiiarticles();modelandview mav = new modelandview();mav.addobject(articles);return mav;軸 p

25、ublic void setarticleservice(articleservice articleservice) this.articleservice = articleservice;打lmodelandview中保存了要传递给视图的对象和具体要使用的视图文件,h2.0起,springmvc提供了 convention over configuration的机制,人人简化了代码与配置。简单地说, 名字以controller结尾的控制器类都会被映射为相应的地址,listarticlecontroller对应 /listarticle*,如果是 multiactioncontroller

26、 则会被映射为-个目录;向 modelandview 添加 对象时可以不用指定键(key),单一对象的键取决于类名,比如x.y.user的键是user,而 某一类对象的set、list或数组则稍有些复杂,取笫一个对象的类名加上“list"作为它的键, 比如这里的articles是一个存放article对象的list,它的键就是articlelist;具体的视图会 根据请求自动在指定目录屮寻找对应的视图文件,木例屮就会寻找listarticle (示缀由配置 文件决 定)。关于convention over configuration还有些别的细节,请参考spring文档的 相关章节。

27、此处的视图比较简陋,只是一张表格,显示了图书的编号、书名和作者,使用jstl的 <c:foreach>标签来遍历列表,具体代码如下:代码:listarticle.jsp曰出v% page pageencoding=,utf-8,'%>曰出v% taglib prefix=',c" uri=" %><head><title>article list</title></head><body><table width="80%" cellspacing=”

28、o” cellpadding="oh border="1'*><thead><tr align=hcenterh><td width="20%">编号v/tdxtd width="50%">书名</tdxtd width="30%">作者v/td></tr></thead><tbody><c:foreach items=u$articlelistm var="articlem><

29、tr><td align="centerm>$article.id</td><td>$article.title</td><td>$</td></tr></c:foreach></tbody></table></body></html>为了使用spring mvc,需要在web.xml-|«配置一个分派器,将一些特定格式的请求交给spring mvc來处理(英实就是一个servlet,这和

30、struts有些类似),如果它的名字是 dispatcher,那么spring默认会去寻找名为dispatcher-servlet.xml的配置文件,该文件内容如下:代码:dispatcher-servlet.xmlv?xml version二”1.0” encoding="utf-8"?><beansxmlns=,f/schema/bea ns”xmlns:xsi=h/2001/xmlschema-instancenxsi:schemalocation=,http:/ww

31、/schema/beans/schema/beans/spring-beans-2.0.xsdhdefault-autowire=lfbynamefl><!- springmvc 相关 bean 配置-><!- view resolver<bean id=,fviewresolvermclass=horg.springframework.web.servlet.viewn ternalresourceviewresolvern><property nam

32、e=,viewclassh value=horg.springframework.web.servlet.viewjstiview”/><property name=nprefixh value=h/web-inf/view/h /><property name=nsuffixm value=h.jspm /></bean><bean id='viewnametranslator11classorg.springframework.web.servlet.view.defaultrequestloviewnametra nslator”/

33、<bea nclass=horg.spri ngframework.web.servlet.mvc.supportc on trollerclassnameha ndlermappi ng,f/><!-以下为 controller -><bean id=hlistarticlecontroller,f class=hdemo.controller.listarticlecontroller11 /></bea ns>配置屮的 defaultrequesttoviewnametranslator 和controllerclassnamehandle

34、rmapping 就是用来实现 convention over configuration 的, 而名为viewresolver的bean则指定了一些视图的信息。step 4.configuration & deployment至此,人部分的t作已经完成了,接下来就是加载properties文件和配置事务属性,这些都放在 applicationcontext.xml 中:代码:application contextxml<? xml version="1.0" encoding=uutf-8"?><beansxmlns=mhttp:/ww

35、/schema/beans”xmlns:xsi=,/2001/xmlschema-instancehxmlns:aop=hh 廿 p://schema/aop”xmlns:tx=h/schema/txnxsi:schemalocation=h/schema/aop http:/www.springframework.org/schema/aop/spring-a

36、op-2.0.xsd/schema/bea ns/schema/beans/spri ngbeans20.xsd/schema/tx/schema/tx/spring-tx-2.0.xsd,f><bean id=hpropertyconfigurer,fclass=horg.springframework.bea ns.factory.config.pr

37、opertyplaceholderc on figurern><property name=nlocationsu><list><value>classpath:perties</value></list></property></bean><!爭务"><tx:advice id=ntxadviceh><tx:attributes><tx:method name=hget*,f read-only=htrueh /><tx

38、:method name=hfinct' read-only=htrueh /><tx:method name=,load*f, read-only=mtruelf /><tx:method name=n*h /></tx:attributes></tx:advice><aop:config proxy-target-class=ntruem><aop:advisor advice-ref=ntxadvicen pointcut=mexecutiondemo.service.*.*(.)h /></ao

39、p:config></bea ns>pointcut属性确泄了 aop拦截的方法,用的是aspectj pointcut expression,此处对demo.service中每一个类的所冇方法都进行了拦截,也就是它们都在事务中执行。perties中保存了一些与数据库和hibernate和关的配置信息,它们会代替xml中对应的占位符:代码:perties# datasource# jndi datasource eg. java:comp/env/jdbc/=# jdbc datasour

40、cedatasource.jdbc.driverclassname=com.mysql.jdbc.driverdatasource.jdbc.url=jdbc:mysql:/localhost/articles?usell nicode=true&charactere ncoding=utf8datasource.jdbc.username=rootd ataso urce.jdbc .passwo rd=# hibernatehibernate.dialect=org.hibemate.dialect.mysqldialecthibernate.show_sql=falsehiber

41、nate.cache.use_query_cache=vider_class=org.hibernate.cache.ehcacheprovider最后要看到的就是web.xml,每个java ee的web项目都会有这个配置文件,具体内容如 下:代码:web.xml<?xml version=n1.0h encoding=uutf-8h?><web-app versi on=u2.4hxmlns=uh 社 p:/java.s un .com/xml/ns/j2eenxmlns:xsi="/

42、2001/xmlschema-instancenxsi:schemalocati on=” http:/java.s un .com/xml/ns/j2ee/web-app_2_4.xsct><!- spring applicationcontext配直文件的路径可使用通配符,多个路径川,号分隔,此参 数用于后面的 spring-context loader -><context-param><param-name>contextc on figlocation</param-name><param-value>/web-inf

43、/modules/applicatio ncon text*.xml</param-value></context-param><!- springmvc分派器及相关映射-><servlet><servlet-name>dispatcherv/servletname><servlet-class>org.springframework.web.servlet.dispatcherservlet</servlet-class><load-on-startup>1</load-on-star

44、tup></servlet><servlet-mappi ng><servlet-name>dispatcher</servlet- name<url-pattern>*.html</url-patter n></servlet-mappi ng><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>*.do</url-patter n></servlet-mappi ng><!-spring applicationcontext 载入<listener><listener-class>org.springframework.web.context.c on textloaderlistener</listener-class></listener><!- spring刷新introspector防止内存泄露-&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论