springmvc mybatisspringmvc课堂笔记_第1页
springmvc mybatisspringmvc课堂笔记_第2页
springmvc mybatisspringmvc课堂笔记_第3页
springmvc mybatisspringmvc课堂笔记_第4页
springmvc mybatisspringmvc课堂笔记_第5页
已阅读5页,还剩25页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

springmvc课堂笔记1 课程安排一天课程:上午的内容:Springmvc是什么?Web系统下mvc设计模式运行原理?Springmvc框架原理?(重点)开发第一个springmvc程序。详细讨论springmvc的三大件:处理器映射器、处理器适配器、视图解析器。处理器映射器:讲两个处理器适配器:讲两个视图解析器:讲一个(jsp)命令表单控制器(框架过期的控制器):基本的使用方法.下午内容:springmvc注解开发:围绕:页面请求不同的数据格式、action响应不同的数据格式。讨论各种常用的注解。(requestMapping、参数、结果、)结果:json转换注解(企业中对json处理需求越来越大,重视)拦截器2 Springmvc是什么Springmvc是spring框架一个模块,实现mvc框架。3 Web(b/s)系统下mvc原理mvc是设计模式,mvc在c/s下和b/s下都有应用。C(controller)控制器类似servlet(request、response)1Request请求6Response响应M(model)模型进行数据封装、业务处理(action,service、pojo.)2 请求模型进行数据处理V(view)视图(jsp)将模型数据封装起来,响应给用户4将模型数据填充到视图5最终的视图返回给控制器在b/s系统下模型不具备将数据推送到视图能力3返回model4 Springmvc框架原理DispacherServlet前端控制器负责(request、response)中央调度(中央控制器)1请求处理器(action/handler)链接Handler处理器(后端控制器)actionHandlerMapping处理器映射器根据xml配置或注解查找Handler2请求获取Handler3 找到HandlerHandlerExecutionChain HandlerInterceptor HandlerInterceptor HandlerHandlerAdapter处理器适配器负责执行Handler4请求执行Handler5执行6返回结果ModelAndView7返回ModelAndView视图解析器ViewResolver负责进行视图解析,返回View8请求视图解析ModelAndView9返回View(封装类)View视图(spring封装类)10渲染视图(将模型数据填充视图)11响应用户1、DispacherServlet前端控制器负责用户请求和响应,是一个中央控制器(调度),调用HandlerMapping查找Handler,调用HandlerAdapter处理器适配器执行Handler,调用ViewResolver视图解析器去解析视图,有了DispacherServlet有利于框架扩展,减少了各各组件之间耦合性。2、HandlerMapping处理器映射器不需要开发,使用框架提供的负责查找Handler(常用action),通过xml配置方式或注解方式将Handler类和request请求Handler链接地址进行对应配置。3、HandlerAdapter处理器适配器不需要开发,使用框架提供的Springmvc提供了很多种适配器,注解适配器支持注解开发、原始servlet适配器(HanderRequestAdapter)支持原始servlet的执行。负责执行Handler,适配器是按照一定的规则去执行Handler,调用Handler返回的结果是ModelAndView,ModelAndView将Model和view封装起来(模型数据和视图)4、ViewResolver视图解析器不需要开发,使用框架提供的负责进行视图解析,返回View,框架执行很多类型的View(jstlView、pdfView。)5、Handler处理器(需要开发)需要开发,按照适配器的规则开发,比如适配器要求Handler实现某个接口,Handler必须实现接口。6、View视图页面(jsp) (需要开发)需要开发,jsp+jstl。为了视图通用性建议使用第三方框架,jstl。处理器映射器、处理器适配器、视图解析器称为springmvc的三大件。5 Springmvc第一程序5.1 准备环境l 开发环境:Eclipse keplerJava6(1.6.45版本)l 框架环境:采用Spring3.1.4版本(包括springmvc的jar spring-webmvc-3.1.4.RELEASE.jar)。5.2 开发第一步:创建javaweb工程第二步:加入jar包第三步:配置springmvc的运行环境l 在web.xml中配置DispacherServlet前端控制器 springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc.xml springmvc *.action l 创建一个springmvc的全局配置文件(springmvc.xml)在此文件中配置三大件:处理器映射器、处理器适配器、视图解析器1 处理适配器:使用下边的适配器:通过上边代码看出,如果Handler实现Controller接口,这个适配器完成执行任务。配置:2处理器映射器3视图解析器第四步:编写Handler处理器(编写action)按照适配器要求的规则编写action类。l 编写action类使用视图解析器前缀和后缀进行视图解析:视图最终地址:前缀+逻辑视图名+后缀视图解析器设置前缀和后缀:Action的编写:l 在spring容器中配置action第五步:编写jsp视图页面第六步:启动tomcat运行工程6 Springmvc三大件加强认识学习6.1 处理器映射器BeanNameUrlHandlerMapping:根据bean的name进行查找Handler 将action的url配置在bean的name中SimpleUrlHandlerMapping 对action的url进行集中配置:配置方式:结论:多个处理器映射器可以共存。6.2 处理器适配器SimpleControllerHandlerAdapter:需要handler实现controller接口HttpRequestHandlerAdapter:要求action类实现HttpRequestHandler 接口6.3 命令控制器页面请求/直接http请求到action类中,由于springmvc是通过方法形参接收参数,action类可以采用单例或多例,建议单例,参数的有效区域只在方法内,方法返回/结束,参数就无效。AbstractCommandController:可以设置命令对象(相当于一个pojo),页面就可以将pojo的属性传入到类方法中。需求:学生信息添加步骤:进入一个学生信息添加页面:需要写一个类,返回到一个添加页面输入学生信息提交到action的方法,提交数据传给命令对象,需要写一个类最终达到目标:可以向action方法一次性传输入多个参数,且这个参数自动给命令对象的属性赋值(底层调用命令对象的set方法)6.3.1 post乱码问题在web.xml添加post乱码处理的过虑器。CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingutf-8CharacterEncodingFilter/*对于get乱码:方法1:修改tomcat /conf/server.xml方法2:手动重新编码String userName new String(request.getParamter(userName).getBytes(ISO8859-1),utf-8)ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码6.3.2 关于日期型参数解析Springmvc将request域中的参数向action方法的形参赋值,springmvc是通过参数解析器对request域中的参数进行解析,赋值给action方法的形参。request域中的参数格式:key/value通过参数解析器进行转换成java对象。需要在action方法中定义的日期型的参数解析器,让解析日期类型的参数:思路:将日期格式的字符串转成java.util.Date/在这里注册一个自定义的参数解析器Overrideprotected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception /设置将请求的日期格式字符串参数转换成命令对象中Date型的属性/这里date类型和命令对象中Date型一致都使用java.util.Datebinder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(yyyy-MM-dd), true);小结:使用命令控制器完全可以开发系统,只是开发不方便,因为一个命令控制器只允许设置一个命令对象,且只允许写一个方法。7 注解开发第一个例子7.1 准备环境l 开发环境:Eclipse keplerJava6(1.6.45版本)l 框架环境:采用Spring3.1.4版本(包括springmvc的jar spring-webmvc-3.1.4.RELEASE.jar)。7.2 开发程序步骤:第一步:创建javaweb工程第二步:加入jar包第三步:配置springmvc的运行环境l 在web.xml中配置DispacherServlet前端控制器l 在springmvc.xml中创建处理器映射器(支持注解)、处理器适配器(支持注解)、视图解析器(jsp解析) 第四步:开发action(重点掌握注解开发的方法)RequestMapping:注解作用是指定方法对应的url一个action类可以定义多个方法,如果一个方法需要对外提供url,需要使用RequestMapping设置对应的url。InitBinder:自定义参数解析器/ 在这里注册一个自定义的参数解析器InitBinderpublic void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception / 设置将请求的日期格式字符串参数转换成命令对象中Date型的属性/ 这里date类型和命令对象中Date型一致都使用java.util.Datebinder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(yyyy-MM-dd), true);上边方法可以放在基础类中,所有的action继承此类,所以有action都可以使用参数解析器。注意:抽取这个父类一定不要有成员变量。!因为springmvc默认是单例的。学生管理类代码:参考:8 与struts2不同1、springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器2、springmvc是基于方法的开发,url和controller的方法是一一对应的,用户请求url(action地址),通过handlermapping找Handler,这个Handler是springmvc封装对象,封装对象将controller的一个方法封装了,Handler里边只有一个方法(简单理解成handler就是一个方法),所以springmvc可以使单例!Struts2是基于类开发的,一个action的实例包括类中所有方法,所以struts2只能使用多例!3、sStruts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面。Jsp视图解析器默认使用jstl。8.1 源代码跟踪:1、 前端控制器调用handlerMapping找Handler2、适配器执行Handler执行Handler之前,如果Handlermapping返回有拦截器,执行拦截器执行Handler返回ModelAndView3视图解析,返回View渲染视图:渲染视图过程:将ModelAndView中Model数据放到request域:9 常用的注解9.1 Controller标识该类为控制器类,controller、service、repository分别对应了web应用三层架构的组件即控制器、服务接口、数据访问接口。9.2 RequestMapping9.2.1 根url和子url配置需求:为了方便管理url,或避免url冲突,会url进行分类,采用根url和子url配置url比如:所以学生管理url都以是/student/开头。需要在controller(action)上通过requestMapping设置根url9.2.2 URI 模板映射需求:将修改学生信息链接改变方式,将参数做url的部分固定。好处:使用url模版方式容易实现restful。Restful:一个互联网系统对互联网资源进行定位一种理念或架构方法,所有互联网上的内容都是一个资源,每一个资源都对应一个url,url的特点是:干净(后边没有? &参数),明确(清楚表示是哪个资源)。比如:查询学生的学习成果:如使用restful方法如下:/student.action?id=s10&contentid=10001表达不清楚,缺点就是搜索引擎不喜欢。使用restful方法如下:/student/s10/10001另一个学生:/student/s20/10002优点:url干净,更清楚表达url意义,容易被搜索引擎收录。Restful对http的协议完全的应用,通过url对资源表达增、删、改、查。9.2.3 限制请求方法可以通过requestMapping限制请求方法(get/post/两者都可以)需求:对学生信息的修改页面,限制使用get方法设置:Get和post都可以请求:RequestMapping(method=RequestMethod.GET,RequestMethod.POST)9.3 形参绑定页面请求数据(key/value),springmvc经过参数解析器进行解析,传入到方法的形参。页面请求数据可以绑定到形参上不同类型的对象。9.3.1 默认支持的参数类型 Springmvc的参数解析器进行解析时,对于形参上已有一些固定的类型默认支持的。如下:HttpServletRequestHttpServletResponseHttpSessionModel:将数据传到页面如下:model.addAttribute(user, new User(李四);使用方法:将类型放到形参上直接可以使用。9.3.2 参数解析器原理页面请求/http请求数据格式:key/valueAction方法形参(不同类型的参数,且可以多个参数)参数解析器:通过handler里边method解析出method的形参的数量及类型。根据形参类型使用不同的参数解析器对解析数据(key/value)给形参赋值使用属性编辑器对形参(可以是简单类型,pojo)里边的属性进行转换,如果是pojo不管属性有多少层属性编辑器都可以进行类型转换9.4 Pojo绑定需求:如果方法的形参全部使用简单类型接收参数不方便,需要使用pojo接收页面参数。方法1:页面上定义的input的name就是pojo的属性形参数就可以使用pojo对象来接收。方法1问题:如果形参上有多个pojo,多个pojo中有相同的属性,页面传入这个相同的属性时,会存在参数解析不正确的问题,无法明确指定将属性值传入哪个pojo对象(方法的一个形参)。方法2:页面上定义:采用pojo点属性名的方法。形参使用什么接收?形参需要使用包装对象接收。注意:内部原理还是通过属性接收参数,student属性在包装对象UserVo中定义,UserVo中student属性名要和页面上定义student.相同。9.5 简单类型数组绑定需求:在学生列表中上批量选择多个学生,批量删除。方法:页面需要向action的方法传入多个学生的id,形参上定义的字符串接收页面传入的批量学生id。页面:Action形参:9.6 使用list绑定需求:录入学生的成绩,一次给一个学生录入成绩,一次需要录入多门课的成绩。方法:页面上录入多门课的成绩,将成绩提交到action方法的形参。每一门课的成绩信息包括两个字段:课程名称、课程成绩Action方法使用List接收,pojo中就有课程名称、课程成绩两个属性。页面定义:Scores:是包装对象中的属性名,类型是ListCoursename:是List中pojo的属性名Score:是list中pojo的属性名。下标相等的是一门课的成绩信息:课程名称、课程成绩Action接收:通过形参的属性接收数据。形参的属性使用List接收。创建一个包装类,在包装类中定义一个属性叫scores是List, pojo中有课程名称、课程成绩两个属性10 结果转发10.1 redirect重定向,重新开启一个新request,浏览器地址栏变了。需求:学生修改成功,重定向学生列表action。10.2 forward页面转发,不会重新开启一个新request,后边转发的action可以接收到之前的requestAction方法之间通过forward跳转,方法之间可以传递java对象。11 json数据处理(重点)11.1 json数据重要性json数据格式:name:张三,age:21,简单理解成key/value对json数据格式已经成为系统间接口传递通用数据格式了,使用json表达数据格式清楚,在页面上通过js解析json数据非常方便。Var obj = name:张三,age:21O/获取json数据的name值。11.2 json数据在页面和action之间传递11.2.1 第一种:页面-action页面向action传递json数据,传递json数据就是json串(字符串)。Springmvc通过参数解析器将json串转成java对象。通过RequestBody将请求的json串转成java对象(action方法的形参)11.2.2 第二种:action-页面Action处理完成结果,将结果信息以json格式传到页面,页面方便进行json数据解析。Springmvc在action方法结束后将java 对象(action的处理结果)转成json串,json串到客户端页面就成为json对象。通过ResponseBody注解将java对象转成json串。11.2.3 测试json传输 环境准备:l 加入jackson的jar包参数解析器需要调用一个json数据转换器将json数据和java对象进行转换。json数据转换器使用jackson(是一个开源的项目)进行java和json转换。l 在适配器加入json转换器11.2.4 测试1:请求json,响应json请求数据格式是json数据:name:张三,age:11指定请求内容类型:contentType等于application/json;charset=utf-8页面js方法:Action方法:11.2.5 测试2:请求key/value,响应json请求数据格式是key/value数据:name=张三&age=11不用指定contentType,默认就是application/x-www-form-urlencoded 页面js方法:Action方法:12 拦截器12.1 配置Springmvc中的拦截器基本HandlerMapping处理器映射器进行配置,拦截器只在所配置的处理器映射器中有效。如果需要创建一个全局的拦截器(所以的请求都要拦截,比如用户身份拦截器),所以需要多个处理器映射器进行配置,很不方便,采用统一配置:这种配置,在所有处理器映射器中对拦截器进行配置,springmvc中没有全局的拦截器,这种配置自动给所有处理器映射器配置拦截器。12.2 定义拦截器定义拦截器,需要类实现接口HandlerInterceptor12.3 测试拦截器使用两个拦截器进行测试,测试1:HandlerInterceptor1,放行HandlerInterceptor2,也放行观察拦截器每个方法是否执行及执行顺序.HandlerInterceptor1.preHandleHandlerInterceptor2.preHandleHandlerInterceptor2.postHandleHandlerInterceptor1.postHandleHandlerInterceptor2.afterCompletionHandlerInterceptor1.afterCompletion测试2:HandlerInterceptor1,放行HandlerInterceptor2,不放行HandlerInterceptor1.preHandleHandlerInterceptor2.preHandleHandle

温馨提示

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

评论

0/150

提交评论