springmvc第一天springmvc的基础知识课程安排:第一天:springmvc的基础知识什么是springmvc?springmvc框架原理(掌握)前端控制器、处理器映射器、处理器适配器、视图解析器springmvc入门程序目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习非注解的处理器映射器、处理器适配器注解的处理器映射器、处理器适配器(掌握)springmvc和mybatis整合(掌握)springmvc注解开发:(掌握)常用的注解学习参数绑定(简单类型、pojo、集合类型(明天讲))自定义参数绑定(掌握)springmvc和struts2区别第二天:springmvc的高级应用参数绑定(集合类型)数据回显上传图片json数据交互RESTful支持拦截器1springmvc框架1.1什么是springmvcspringmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。(struts2与Spring整合的时候需要借助单独的jar包)springmvc是一个基于mvc的web框架。1.2mvc在b/s系统下的应用mvc是一个设计模式,mvc在b/s系统下的应用:C控制器比如struts2中的filtercontroller接口用户请求,响应request请求M模型(model)pojoactionservicedao请求模型进行处理处理结果返回V视图view视图渲染将模型数据填充到request域response响应b/s系统下模型无法将数据填充到视图1.3springmvc框架第一步:发起请求到前端控制器(DispatcherServlet)第二步:前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找第三步:处理器映射器HandlerMapping向前端控制器返回Handler第四步:前端控制器调用处理器适配器去执行Handler第五步:处理器适配器去执行Handler1request请求url前端控制器DispatcherServlet接口用户请求,响应Handler处理器平常叫做controller处理器映射器HandlerMapping2请求查找Handler3返回一个执行链HandlerExecutionChain{HandlerInterceptor1HandlerInterceptor2Handler}处理器适配器HandlerAdapter去执行Handler4请求适配器执行Handler5执行6返回ModelAndView7返回ModelAndViewview视图jspfreemarkerexcelpdf视图解析器Viewresolver8请求进行视图解析9返回view10视图渲染将模型数据填充到request域11response响应第六步:Handler执行完成给适配器返回ModelAndView第七步:处理器适配器向前端控制器返回ModelAndViewModelAndView是springmvc框架的一个底层对象,包括Model和view第八步:前端控制器请求视图解析器去进行视图解析根据逻辑视图名解析成真正的视图(jsp)第九步:视图解析器向前端控制器返回View第十步:前端控制器进行视图渲染视图渲染将模型数据(在ModelAndView对象中)填充到request域第十一步:前端控制器向用户响应结果组件:1、前端控制器DispatcherServlet(不需要程序员开发)作用接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。2、处理器映射器HandlerMapping(不需要程序员开发)作用:根据请求的url查找Handler3、处理器适配器HandlerAdapter作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler4、处理器Handler(需要程序员开发)注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler5、视图解析器Viewresolver(不需要程序员开发)作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)6、视图View(需要程序员开发jsp)View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)2入门程序2.1需求以案例作为驱动。springmvc和mybaits使用一个案例(商品订单管理)。功能需求:商品列表查询2.2环境准备数据库环境:mysql5.1java环境:jdk1.7.0_72eclipseindigospringmvc版本:spring3.2需要spring3.2所有jar(一定包括spring-webmvc-3.2.0.RELEASE.jar)2.3配置前端控制器在web.xml中配置前端控制器。2.4配置处理器适配器在classpath下的springmvc.xml中配置处理器适配器通过查看原代码:此适配器能执行实现Controller接口的Handler。2.5开发Handler需要实现controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。publicclassItemsController1implementsController{@OverridepublicModelAndViewhandleRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//调用service查找数据库,查询商品列表,这里使用静态数据模拟ListItemsitemsList=newArrayListItems();//向list中填充静态数据Itemsitems_1=newItems();items_1.setName(联想笔记本);items_1.setPrice(6000f);items_1.setDetail(ThinkPadT430联想笔记本电脑!);Itemsitems_2=newItems();items_2.setName(苹果手机);items_2.setPrice(5000f);items_2.setDetail(iphone6苹果手机!);itemsList.add(items_1);itemsList.add(items_2);//返回ModelAndViewModelAndViewmodelAndView=newModelAndView();//相当于request的setAttribut,在jsp页面中通过itemsList取数据modelAndView.addObject(itemsList,itemsList);//指定视图modelAndView.setViewName(/WEB-INF/jsp/items/itemsList.jsp);returnmodelAndView;}}2.6视图编写2.7配置Handler将编写Handler在spring容器加载。2.8配置处理器映射器在classpath下的springmvc.xml中配置处理器映射器2.9配置视图解析器需要配置解析jsp的视图解析器。2.10部署调试访问地址:处理器映射器根据url找不到Handler,报下边的错误。说明url错误。处理器映射器根据url找到了Handler,转发的jsp页面找到,报下边的错误,说明jsp页面地址错误了。3非注解的处理器映射器和适配器3.1非注解的处理器映射器处理器映射器:org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping另一个映射器:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。3.2非注解的处理器适配器org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter要求编写的Handler实现Controller接口。org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter要求编写的Handler实现HttpRequestHandler接口。//使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据/*response.setCharacterEncoding(utf-8);response.setContentType(application/json;charset=utf-8);response.getWriter().write(json串);*/4DispatcherSerlvet.properties前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。5注解的处理器映射器和适配器在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。5.1配置注解映射器和适配器。!--使用mvc:annotation-driven代替上边注解映射器和注解适配器配置mvc:annotation-driven默认加载很多的参数绑定方法,比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter实际开发时使用mvc:annotation-driven--!--mvc:annotation-driven/mvc:annotation-driven--5.2开发注解Handler使用注解的映射器和注解的适配器。(注解的映射器和注解的适配器必须配对使用)//使用Controller标识它是一个控制器@ControllerpublicclassItemsController3{//商品查询列表//@RequestMapping实现对queryItems方法和url进行映射,一个方法对应一个url//一般建议将url和方法写成一样@RequestMapping(/queryItems)publicModelAndViewqueryItems()throwsException{//调用service查找数据库,查询商品列表,这里使用静态数据模拟ListItemsitemsList=newArrayListItems();//向list中填充静