SpringMVC学习笔记_第1页
SpringMVC学习笔记_第2页
SpringMVC学习笔记_第3页
SpringMVC学习笔记_第4页
SpringMVC学习笔记_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、springmvc学习笔记2.3.1. spring web mvc处理请求的流程如图2-12、委托请求给处理器5 返叵moddandvicwioddai)dvievj渲染 视图前端控能器页面粒制翳处理器内务再调业对响应视图模型模型1 7web容器:如tomcat图212.3.2. spring web mvc架构1、spring w巳b mvc核心架构图,如图2-2vicxresolver4、调瞰囱谓 nm器次vicxh 的 dkr jolhmcrttolkrhanellexadapterhandlcrmapping图2-2核心架构的具体流程步骤如下: 工、首先用户发送请求dispatche

2、rservlet前端控制器收到 请求后自己不进行处理,而是委托给其他的解析 器进行处理,作为统一访问点,进行全局的流程 控制;2、 dispatcherservlethandlermapping, handlermapping 将会把请求 映射为 handlerexecutionchain 对象(包 含一个handler处理器(页面控制器)对象、 多个handlerlnterceptor拦截器)对象, 通过这种策略模式,很容易添加新的映射策略;3、 dispatcherservlethandleradapter, handleradapter将会把处理器包装为适配器,从而支持多种类型的处理器,

3、即适 配器设计模式的应用,从而很容易支持很多类型 的处理器;4、 handleradapter 处理器功能处 理方法的调用,handleradapter将会根据适配的结果调用真正的处理器的功能处理方法,完 成功能处理;并返回一个modelandview对 象(包含模型数据、逻辑视图名); 5、 modelandview的逻辑视图名viewresolver, viewresolver 将把逻辑 视图名解析为具体的view,通过这种策略模 式,很容易更换其他视图技术;6、view一一渲染,view会根据传进来的 model模型数据进行渲染,此处的model实 际是一个map数据结构,因此很容易支持

4、其他 视图技术;7、返回控制权给dispatcherservlet,由dispatcherservlet返回响应给用户,至眦一个流程结束。此处我们只是讲了核心流程,没有考虑拦截器、 本地解析、文件上传解析等,后边再细述。到此,再来看我们前边提出的问题:1、 请求如何给前端控制器?这个应该在 web.xml中进行部署描述,在helioworld 中详细讲解。2、前端控制器如何根据请求信息选择页面控制器进行功能处理?我们需要配置handlermapping 进行映射3、 如何支持多种页面控制器呢?配置handleradapter从而支持多种类型的页面控制器4、如何页面控制器如何使用业务对象?可以预

5、料到,肯定利用spring ioc容器的依赖注 入功能5、页面控制器如何返回模型数据?使用modelandview 返回6、 前端控制器如何根据页面控制器返回的逻 辑视图名选择具体的视图进行渲染?使用viewresolver进行解析7、不同的视图技术如何使用相应的模型数 据?因为model是一个map数据结构,很容 易支持其他视图技术 在此我们可以看出具体的核心开发步骤:1 dispatcherservlet 在 web.xml 中的 部署描述,从而拦截请求到spring web mvc2、 handlermapping的配置,从而将请求映射到处理器3、 handleradapter的配置,从

6、而支持多种类型的处理器4、 viewresolver的配置,从而将逻辑视图名解析为具体视图技术5、处理器(页面控制器)的配置,从而进行功能处理load-on-startup:表示启动容器时初始化该 servlet; url-pattern:表示哪些请求交给springweb mvc处理,”/是用来定义默认 servlet映射的。也可以如表示拦截所有以html为扩展名的请求。自此请求已交给spring web mvc框架处理,因此我们需要配置spring的配置文件,默 认 dispatcherservlet 会力口载web-inf/dispatcherservlet 的servlet名字serv

7、let.xml配置文件。本示 例为 web工nf/ chapter2-servlet.xmloeannamellrlhandlermapping:表示将请求的url和bean名字映射,如url为上 下文/hello,则spring配置文件必须有一个 名字为hello的bean,上下文默认忽略。simplecontrollerhandleradapter:表示所有实现了org.springframework, web.servlet.m vc.controllerbean 可以作为spring web mvc中的处理器。如果需要其他类型的处理器可以通过实现hadleradapter 来解决。in

8、ternalresourceviewresolver:用于 支持servlet、jsp视图解析;viewclass: jstiview 表示 jsp 模板页 面需要使用jstl标签库,classpath中必须 包含jstl的相关jar包;prefix和suffix:查找视图页面的前缀和后缀(前缀逻辑视图名后缀),比如传进来的逻辑视图名为hell。,则该该jsp视图页面应该存放在 3web“nf/jsp/hello.jsp; org.springframework, web.servlet.m vc.controller:页面控制器/处理器必须实现controller接口,注意别选错了;后边我们

9、会学习其他的处理器实现方式;public modelandview handlerequest(httpservletrequest req, httpservletresponse resp):功能处理方法,实现相应的功能处理,比如收集参数、 验证参数、绑定参数到命令对象、将命令对象传 入业务对象进行业务处理、最后返回modelandview 对象;modelandview:包含了视图要实现的模型数据和逻辑视图名;mv.addobjectcmessage11, helloworld!11);表示添加模型数据,此处可以是任意pojo对 象;表示 设置逻辑视图名为hell。,视图解析器会将其 解

10、析为具体的视图,如前边的视图解析器internalresourcevio wresolver 会将其 解析为webhnf/jsp/hello.jsp”。1. 2. con textconfiglocation3. classpath*:/springmvc.xml4. 指明了配置文件的文件名,不使用默认配置文件 名,而使用springmvc.xml配置文件。41*.xml 这里可以使用多种写法1、不写,使用默认值:/webinf/vservlet-nameservlet.xml2、 /web-inf/classes/springmvc.xml3、classpath*:springmvc-mvc

11、.xml 4、多个值用逗号分隔servlet拦截匹配规则可以自己定义,拦截哪种url合适?m/requestmapping(,7user/addm)0, 为例:1 拦截*.d。、 *.htm, 例如:/user/add.do 这是最传统的方式,最简单也最实用。不会导致 静态文件(jpg,js,css)被拦截。2、拦截/,例如:/user/add可以实现现在很流行的rest风格。很多互联网 类型的应用很喜欢这种风格的urlo 弊端:会导致静态文件(jpg,js,css)被拦截后 不能正常显示。想实现rest风格,事情就是麻 烦一些。后面有解决办法还算简单。3、拦截/*,这是一个错误的方式,请求可

12、以走到action中,但转到jsp时再次被拦截,不能 访问到jsp。五、父子上下文(webapplicationcontext)如果你使用了listener监听器来加载配置,一般在struts+sphng+hibemate的项目中都是使用listener监听器的。如 下java代码一1. 2. ,org.springframev/ork.web.context.contextloaderlistener3. spring会创建一个webapplicationcontext上下文,称为父上下文(父容器),保存在servletcontext中/key是 webapplicationcontext.

13、root_web_application_context-attributeo 可以使用spcng提供的工具类取出上下文对象:webapplicationcontextutils getwebapplicationcontext(servletcontext);dispatcherservlet是一个servlet.可以同时配置多个,每个dispatcherservlet有一个自己的上下文对象(webapplicationcontext),称为子上下文(子容器),子上下文可以访问父上下文中的内容,但父上下文不能 访问子上下文中的内1容。它也保存在servletcontext中;key,org

14、springframework.web servlet.frameworkservlet.contextservleto 当一个request对象产生时, 会把这个子上下文对象(webapplicationcontext)保存在request对象中,key是 dispatcherservlet.class getname() + context。可以使用工具类取出上下文对象:requestcontextutils getwebapplicationcontext(request):说明:spring并没有限制我们,必须使用父子上下文。我们可以自己决定如何使用。l:component-scan/

15、扫描指定的包中的类上的注解,常用的注解有:controller 声明 action 组件service 声明service组件 servicecymovielister*)repository 声明 dao组件component泛指组件.当不好归类时requestmapping(,7menun)请求映射resource 用于注入,(j2ee提供的)默认按名称装配,resource(name=,beannameh)autowired用于注入,(srping提供的)默认按类型装配transactional( rollbackfor=exception class)事务管理responsebodys

16、cope(”prototype)设定bean的作用域nmvc:annotauon-dne/是一种简写形式,完全可以手动配罡音代这种简写形式,简写形式可以让初钾品嫄应 用青认配置方案。spnng nwcicontol:ers分发请求所必须的。并提供了 :数据绑定支持. numberforniatannatation. datetirne:fomat支持2vhid支持.读写xml 的支持(j4xb),读写json的支持jackson) .后面.,我们处理响应可不请求时,就使用到了对json的支持。后面,对action写jun 啤元测试时,要从spring qc容奇甲取defaultannotati

17、onhandlermapping与annolationmethodhandleadapter f- bean,未完成测试,,取的时候荽失值鳄mvc annptationdwen /力玄一句 注册的这两个bean。如何杳换rwc annotaiion-drieno?他到信做了什么工作话看,的后面的十九节到底的了 什么工作。是一种简写形式通过看前面的大图,知道,找们可卵强每个handlewapping。mvc interceptors/,会为/一个hdndlwm即ping,注入一t拦截器。苴实我们也可以手动配跟为每个 handle回平ping注入一个拦萩器。 使用联认的 servle 床晌应静态文

18、件。 匹配url /images/* 的 url被当,他静庭茯源,由spring读出到内存中再晌应mtp。七、如何访问到静态的文件,如jpgjs,css?如何你的disoaichersemet栏翻 do,这样的有后谣的url.就不在在访问不到符宓堂源的问题。如果你的disoatchersemet栏被7,为7实现rest风格,拦献了所有的谙求,那么同时对,jsj.jpg等裕态文件的访问也就 独拦截了。我们要策决这个问题。目的;可以正常访诃符志文件,不可以找不到铮态文件3典04。方案一:淑洁tome就的ctefaultserv周来处理海芯文件xml代码-1. 2. aefault3. *.jpg4

19、. 5. sdeault7. *.js8. 910. default11. *.css12. /servlet-napping13. 蔚置多个,每种文件苞用一个要不在dispatchgrsgel猷的前面,让defauvs01vlm先拦街清求,这样市才弥不会出人.spring ,我想性能是最好的吧。tomcat. jetty j3oss and glassfish 自带的默认semet的名字-defaultgoogle app engine 自带的默认sezel的名字-“_ah_defaul【”resin自带的默认servlet的名寸-rgsin-fihweblogic自带的默认semet的名的

20、filesenletwebsphere 自芾的默认semet的名字-simplef leseiviet,方案二:在即即93。4以后版不提供了亦亡950583,使用方法:xml代码l 2. .mages.映肘到resourcehttprecuesthandleri注行欠理,iccation指定杼态奚原的位孟可以是web application根目录下、 及咆里面这样可以泡/态费源(i缩到jar包中。cacha-period可以使得警态资源进行wqo each。如果出也下面的惜误,可能是母右因普n?s 把mapoing的uri注明到simpleurlhand21mapping的山imap中key

21、为 mapping 的 uri pa tt e rn fl. in /a lue re s ourc e httpre quest handl er.这件比巧妙的汜对玲志奥迪的访问由handlermacping转到口6$。3814119区60戊$出3间6处理并返回所以就支持classgth 目录jar包内忤态奥叁的访问.另站秀要生窟的一点是不妾对simpiguahandl9rm即ping设置扫faulthandlor.因为对static uri的dofaulthandl成是 resourcehttprequesthandler否则无法处理static resources request方案三

22、使用xmi代码o 1.会把 v 1n注册gijsimpieurihandiermapping的unm叩中把对静态硼的访问由handlermappin解到org.springframevorkveb servlet resource.defauitservlethttprequesthandiefib31ig|odefallltsem曰httpreqlje5th己ndle像目就是各个servla容器自己的用t认sev层t补充说明:多个handlermapping的执行顺序问题;defauitannotationhandiermapping的0rde虑性值是:0vrhcr&scurcqs/、自动主

23、用的 simpieurihand ermapp ng的。rd。,属性值是:2147483646ib?iffl 的simpleurihandleimauping 的o也i国性值是:2147483647spring先执行。rderfl比较小的。当访问一个a jpg图片文件时,先通过defaultannotatonhandlermapp ng 处理器,一谈找不到的,因为我们没有叫a jpg的action.然后再按。der升序我,由于最后一个 simpeurihanciermapping是国亡的,所以一定会匹配上,就可以响应图片。访同一个西片,迁要是层层四配、不先法竣如何?最后再说明一下,方案二、方案

24、三在访问砺资源时,如果有四里的(近似)总拦弑器,就会走拦经器。如果你在拦 截中实现权限检查,要注窿过渡这些对静态文件的请求。如何你的dispatcherservle无超tdoi旃的urlfe级,助不存上述问题了。迁是有后堀方便。转载请注明琐:原文也址: 西 展i484& leye corr dog。583c八、请求如何映射到具体的action中的方法?方案二j 基于xm配置映|九可以利用simpleurlhandlewapping、beannameurlhandlermepping进行uri映i片哄戡请求1 配舫;坪。方案二:基于注筋映射,可以使用defauliannctationhandiermapping。xml代码二1. 但前面芨们比去了 他会自动注好这个ban就不须去数们显示的注册这个bgant o如何苔换?他到扇做了什2工作,请百,最后面的十九节倒扁做了 什么工作以上都可

温馨提示

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

评论

0/150

提交评论