ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:856.38KB ,
资源ID:9072532      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9072532.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring MVC 4x 学习笔记.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring MVC 4x 学习笔记.docx

1、Spring MVC 4x 学习笔记SpringMVC 学习笔记1 springMVC初接触1.1 springMVC是什么Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。另外还有一种基于组件的、事件驱动的Web框架。Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆

2、为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。1.2 Spring Web MVC能帮我们做什么 让我们能非常简单的设计出干净的Web层和薄薄的Web层; 进行更

3、简洁的Web层的开发; 天生与Spring框架集成(如IoC容器、AOP等); 提供强大的约定大于配置的契约式编程支持; 能简单的进行Web层的单元测试; 支持灵活的URL到页面控制器的映射; 非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); 非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; 提供一套强大的JSP标签库,简化JSP开发; 支持灵活的本地化、主题等解析; 更加简单的异常处理; 对静态资源的支持; 支持

4、Restful风格。1.3 Spring Web MVC架构Spring Web MVC框架也是一个基于请求驱动的Web框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理。首先让我们整体看一下Spring Web MVC处理请求的流程:1.3.1 、Spring Web MVC处理请求的流程具体执行步骤如下:1、首先用户发送请求前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图中的1、2步骤;2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求

5、参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图的3、4、5步骤;3、 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图的步骤6、7;4、 前端控制器再次收回控制权,将响应返回给用户,图的步骤8;至此整个结束。问题:1、 请求如何给前端控制器?2、 前端控制器如何根据请求信息选择页面控制器进行功能处理?3、 如何支持多种页面控制器呢?4、 如何页面控制器如何使用业务对象?5、 页面控制器如何返回模型数

6、据?6、 前端控制器如何根据页面控制器返回的逻辑视图名选择具体的视图进行渲染?7、 不同的视图技术如何使用相应的模型数据?首先我们知道有如上问题,那这些问题如何解决呢?请让我们先继续,在后边依次回答。1.3.2 Spring Web MVC架构Spring Web MVC核心架构图,如图核心架构的具体流程步骤如下:1、 首先用户发送请求DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;2、 DispatcherServletHandlerMapping, HandlerMapping将会把请求映射为Han

7、dlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;3、 DispatcherServletHandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;4、 HandlerAdapter处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻

8、辑视图名);5、 ModelAndView的逻辑视图名 ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;6、 View渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。此处我们只是讲了核心流程,没有考虑拦截器、本地解析、文件上传解析等,后边再细述。到此,再来看我们前边提出的问题:1、 请求如何给前端控制器?这个应该在w

9、eb.xml中进行部署描述,在HelloWorld中详细讲解。2、 前端控制器如何根据请求信息选择页面控制器进行功能处理?我们需要配置HandlerMapping进行映射3、 如何支持多种页面控制器呢?配置HandlerAdapter从而支持多种类型的页面控制器4、 如何页面控制器如何使用业务对象?可以预料到,肯定利用Spring IoC容器的依赖注入功能5、 页面控制器如何返回模型数据?使用ModelAndView返回6、 前端控制器如何根据页面控制器返回的逻辑视图名选择具体的视图进行渲染?使用ViewResolver进行解析7、 不同的视图技术如何使用相应的模型数据?因为Model是一个M

10、ap数据结构,很容易支持其他视图技术在此我们可以看出具体的核心开发步骤:1、 DispatcherServlet在web.xml中的部署描述,从而拦截请求到Spring Web MVC2、 HandlerMapping的配置,从而将请求映射到处理器3、 HandlerAdapter的配置,从而支持多种类型的处理器4、 ViewResolver的配置,从而将逻辑视图名解析为具体视图技术5、处理器(页面控制器)的配置,从而进行功能处理1.4 Spring Web MVC优势1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器

11、适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;4、和Spring 其他框架无缝集成,是其它Web框架所不具备的;5、可适配,通过HandlerAdapter可以支持任意的类作为处理器;6、可定

12、制性,HandlerMapping、ViewResolver等能够非常简单的定制;7、功能强大的数据验证、格式化、绑定机制;8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。10、强大的JSP标签库,使JSP编写更容易。还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。1.5 Hello World入门1.5.1 开发环境准备1.5.1.1 添加spring mvc依赖Spring mvc 依赖于spring核心,也就是IOC&DI以及AOP,所以需

13、要在原有spring项目基础上添加springmvc的依赖。在pom.xml文件中添加org.springframeworkspring-webmvc$spring.version1.5.2 前端控制器的配置在我们的web.xml中添加如下配置:dispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:/spring-mvc.xml1dispatcherServlet/oad-on-startup:表示启动容器时初始化该Servlet;url-pattern:

14、表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。自此请求已交给Spring Web MVC框架处理,因此我们需要配置Spring的配置文件,默认DispatcherServlet会加载WEB-INF/DispatcherServlet的Servlet名字-servlet.xml配置文件。本示例为WEB-INF/ spring-mvc.xml。PS:springmvc的控制器的映射路径一般写成/,除此之外还可以是: /:支持RESTful,便于检索。 /*:不能返回视图。 *.do(必须

15、以.do结尾的路径才能访问。)1.5.3 springmvc配置文件的实现在resource目录下建立springmvc.xml文件.1.5.3.1 Spring配置文件中配置HandlerMapping、HandlerAdapterBeanNameUrlHandlerMapping:表示将请求的URL和Bean名字映射,如URL为 “上下文/hello”,则Spring配置文件必须有一个名字为“/hello”的Bean,上下文默认忽略。SimpleControllerHandlerAdapter:表示所有实现了org.springframework.web.servlet.mvc.Contr

16、oller接口的Bean可以作为Spring Web MVC中的处理器。如果需要其他类型的处理器可以通过实现HadlerAdapter来解决。1.5.3.2 在Spring配置文件中配置ViewResolverInternalResourceViewResolver:用于支持Servlet、JSP视图解析;viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;故在pom.xml中需要加入:jstljstl$jstl.versionjavaxjavaee-api$javaee.version prefix和suffix:

17、查找视图页面的前缀和后缀(前缀逻辑视图名后缀),比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;1.5.4 开发处理器/页面控制器建立控制类,HellowordController,代码如下1.5.5 开发页面在/WEB-INF/jsp目录下建立hello.jsp文件,代码如下:1.5.6 启动web应用,测试helloword启动tomcat,若项目为配置tomcat的,请根据以前的学习自行配置tomcat启动无异常后,在浏览器输入:http:/ip:port/上下文/hello访问helloword,结果如下:PS:疑问问题

18、1. 为什么输入的地址是 /hello原因:因为springmvc中是通过BeanNameUrlHandlerMapping实现路径映射,将请求的URL和Bean名字映射,我们这里bean的name属性值为/hello,所以我们访问时也是/hello。2. 我访问的是controller,但为什么在客户端看到的却是hello.jsp的内容原因:因为springmvc中,用户通过/hello请求服务器,DispatcherServlet将会指派name为/hello的bean来处理用户请求,而且会执行handleRequest方法。过程如下 运行步骤:1、 首先用户发送请求http:/local

19、host:9080/springmvc-chapter2/helloweb容器,web容器根据“/hello”路径映射到DispatcherServlet(url-pattern为/)进行处理;2、 DispatcherServletBeanNameUrlHandlerMapping进行请求到处理的映射,BeanNameUrlHandlerMapping将“/hello”路径直接映射到名字为“/hello”的Bean进行处理,即HelloWorldController,BeanNameUrlHandlerMapping将其包装为HandlerExecutionChain(只包括HelloWor

20、ldController处理器,没有拦截器);3、 DispatcherServlet SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter将HandlerExecutionChain中的处理器(HelloWorldController)适配为SimpleControllerHandlerAdapter;4、 SimpleControllerHandlerAdapter HelloWorldController处理器功能处理方法的调用,SimpleControllerHandlerAdapter将会调用处理器的handleR

21、equest方法进行功能处理,该处理方法返回一个ModelAndView给DispatcherServlet;5、 hello(ModelAndView的逻辑视图名)InternalResourceViewResolver, InternalResourceViewResolver使用JstlView,具体视图页面在/WEB-INF/jsp/hello.jsp;6、 JstlView(/WEB-INF/jsp/hello.jsp)渲染,将在处理器传入的模型数据(message=HelloWorld!)在视图中展示出来;7、 返回控制权给DispatcherServlet,由Dispatcher

22、Servlet返回响应给用户,到此一个流程结束。2 springmvc进阶-基于注解开发在第一章的helloword的例子中,我们已经完成了springmvc的第一个实例,但是在该实现中我们发现以下问题:1. 每个controller必须实现controller接口,增加耦合性2. 每个controller必须在配置文件中定义bean,太麻烦,是否支持注解的方式定义;3. 每个controller必须通过方法handleRequest来处理用户请求,且一个controller只能处理一个请求,不能做到业务整合;4. 每次请求都要去封装modelAndView对象,太麻烦。And so on2.

23、1 基于注解的方式来开发springmvcSpring mvc也支持注解的方式来定义bean2.1.1 Spring-mvc.xml中的变化因涉及注解所以必须添加自动包扫描的配置:PS:如果是在原有的spring项目上加spring mvc,现在的自动扫描包请明确到你的Controller所在的正确目录,否则可能会出现加载其他的注解出错。开启注解支持,开启springmvc的注解支持取消掉原来在spring-mvc.xml中配置的HelloWordController的bean2.1.2 HelloWordController中的变化1. 取消实现接口Controller,将该类变成最普通的j

24、ava类,并通过注解将其定义为一个Controller,通过Controller注解2. 定义一个普通的方法来处理用户,该方法返回一个字符串2.1.3 启动tomcat,访问之 启动tomcat,通过http:/localhost:7001/sayhello访问,结果如下问题:1. 在Controller类的方法直接返回一个字符串是什么意思?2. Controller中没有传递数据给jsp2.1.4 controller处理请求的方法的返回值 Controller的方法中直接返回一个字符串,代表的是设置一个视图的名称,他将会根据我们在spring-mvc.Xml中定义的规则自动增加前缀和后缀,

25、此处返回hello,那么结果就是:/WEB-INF/jsp/hello.jsp其规则如下: 1. return “list”如果定义了视图解析器,则会将请求转发到对应的视图页面,比如本案例中定义了Springmvc 会将请求转发到 prefix+你的return+suffix地址去,即本案例的/WEB-INF/hello.jsp。此处加/不代表上下文根路径,仅仅作为字符串拼接所用。2. return “redirect:/list”;重定向到另外一个action地址,该地址是已经定义的,加/代表上下文根路径;不加代表相对路径,建议加上。3. return “forward:/list”;请求转

26、发到另外一个action地址,该地址是已经定义的,加/代表上下文根路径;不加代表相对路径,建议加上。2.1.5 Controller中如何传递数据给JSP视图2.1.5.1 将方法的返回值改为ModelAndView在返回时,将数据存储在ModelAndView对象中如:在这里要注意的是数据是默认被存放在request中的。2.1.5.2 通过方法带Model参数的,然后调用model.addAttribute(String key,Object value)的方式传递,在JSP中可以从request作用域中获取。 2.1.6 处理springMVC中的静态资源问题在本例中,我们在web资源的

27、根目录即webapp下建立一个html文件my.html,浏览器通过地址:http:/ip:port/上下文/my.html访问,会发现该资源不可访问,通过查看debug调测日志可以发现springmvc将我们的静态资源也一起拦截了,而且尝试去找到对应的Controller处理方法,但是找不到对应的映射。解决方案为去掉以下两个bean的定义,修改为springmvc为我们提供的默认Handler处理方式。此方式会过滤掉静态资源的请求2.1.7 springmvc中处理post请求中的乱码问题从以前jsp的学习中,我们就知道post的请求参数若带有全角文字,我们必须在获取参数前通过request.setCharactor(编码)的方式设置后方可正确获取,而因为一个应用中多次需要使用且都是在请求获取前处理,所以我们曾经使用过滤器的方式来实现post的中文乱码问题,而在springmv

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1