javaEE框架课程传智播客java学院传智.燕青Springwebmvc框架课程讲师:传智.燕青javaEE框架课程传智播客java学院传智.燕青1SpringMVC架构1.1Springwebmvc介绍Springwebmvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:1.2WebMVCmvc设计模式在b/s系统下应用:javaEE框架课程传智播客java学院传智.燕青1、用户发起request请求至控制器(Controller)控制接收用户请求的数据,委托给模型进行处理2、控制器通过模型(Model)处理数据并得到处理结果模型通常是指业务逻辑3、模型处理结果返回给控制器4、控制器将模型数据在视图(View)中展示web中模型无法将数据直接在视图上显示,需要通过控制器完成。如果在C/S应用中模型是可以将数据在视图中展示的。5、控制器将视图response响应给用户通过视图展示给用户要的数据或处理结果。1.3Springwebmvc架构1.3.1架构图1发起请求C控制器controller作用:接收请求,响应处理结果,没有业务逻辑5响应结果M模型pojoservicedao2请求业务处理V视图View将模型数据展示给用户4向view中填充模型数据3返回模型注意:b/s下模型无法将数据设置到视图中javaEE框架课程传智播客java学院传智.燕青1.3.2架构流程1、用户发送请求至前端控制器DispatcherServlet2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器5、执行处理器(Controller,也叫后端控制器)。6、Controller执行完成返回ModelAndView7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器9、ViewReslover解析后返回具体View10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。11、DispatcherServlet响应用户1.3.3组件说明以下组件通常使用框架提供实现:DispatcherServlet:前端控制器用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。HandlerMapping:处理器映射器HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。Handler:处理器Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。javaEE框架课程传智播客java学院传智.燕青由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。HandlAdapter:处理器适配器通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。ViewResolver:视图解析器ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。2商品订单业务说明本教程在通过商品订单业务学习使用springmvc进行功能开发。2.1业务流程1、管理员维护商品信息2、用户挑选商品,购买,创建订单2.2数据库环境先导入sql_table.sql,再导入sql_data.sql脚本:如下:javaEE框架课程传智播客java学院传智.燕青javaEE框架课程传智播客java学院传智.燕青2.3商品订单数据模型用户表:users记录了购买商品的用户信息Id:唯一标识一个用户订单表:orders记录了用户创建的订单创建用户:users_id(外键)订单号创建时间订单状态外键:users_id订单明细表:orderdetail记录了用户购买信息所属订单:orders_id(外键)商品id:items_id(外键)商品数量商品购买价格外键:orders_id商品信息:items记录了所有商品信息商品id:id(主键)商品名称:商品介绍商品价格外键:items_id一对多用户可以创建多个订单一对一:一个订单只能由一个用户创建一对多一个订单包括多个购买明细一对一一个订单明细只能属于一个订单一对一一个明细对应一个商品一对多一个商品对应多个订单明细通过订单明细表订单表和商品表建立关系一个订单对应多个商品一个商品对应多个订单订单表和商品表是多对多关系javaEE框架课程传智播客java学院传智.燕青3SpringMVC入门3.1需求实现商品查询列表功能。3.2开发环境准备本教程使用Eclipse+tomcat7开发详细参考“Eclipse开发环境配置-indigo.docx”文档3.3第一步:建立一个Web项目在eclipse下创建动态web工程springmvc_first。3.4第二步:导入spring3.2.0的jar包javaEE框架课程传智播客java学院传智.燕青3.5第三步:前端控制器配置在WEB-INF\web.xml中配置前端控制器,servletservlet-namespringmvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namespringmvc/servlet-nameurl-pattern*.action/url-pattern/servlet-mappingload-on-startup:表示servlet随服务启动;url-pattern:*.action的请交给DispatcherServlet处理。contextConfigLocation:指定springmvc配置的加载位置,如果不指定则默认加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml。3.5.1Servlet拦截方式1、拦截固定后缀的url,比如设置为*.do、*.action,例如:/user/add.action此方法最简单,不会导致静态资源(jpg,js,css)被拦截。2、拦截所有,设置为/,例如:/user/add/user/add.action此方法可以实现REST风格的url,很多互联网类型的应用使用这种方式。但是此方法会导致静态文件(jpg,js,css)被拦截后不能正常显示。需要特殊处理。3、拦截所有,设置为/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功。3.6第四步:springmvc配置文件javaEE框架课程传智播客java学院传智.燕青Springmvc默认加载WEB-INF/[前端控制器的名字]-servlet.xml,也可以在前端控制器定义处指定加载的配置文件,如下:init-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc.xml/param-value/init-param如上代码,通过contextConfigLocation加载classpath下的springmvc.xml配置文件。3.7第五步:配置处理器适配器在springmvc.xml文件配置如下:beanclass=org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter/SimpleControllerHandlerAdapter:即简单控制器处理适配器,所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean作为Springmvc的后端控制器。3.8第六步:处理器开发publicclassItemList1implementsController{@OverridepublicModelAndViewhandleRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//商品列表ListItemsitemsList=newArrayListItems();Itemsitems_1=newItems();items_1.setName(联想笔记本);items_1.setPrice(6000f);items_1.setDetail(ThinkPadT430联想笔记本电脑!);Itemsitems_2=newItems();items_2.setName(苹果手机);items_2.setPrice(5000f);javaEE框架课程传智播客java学院传智.燕青items_2.setDetail(iphone6苹果手机!);itemsList.add(items_1);itemsList.add(items_2);//创建modelAndView准备填充数据、设置视图ModelAndViewmodelAndView=newModelAndView();//填充数据modelAndView.addObject(itemsList,itemsList);//视图modelAndView.setViewName(order/itemsList);returnmodelAndView;}}org.springframework.web.servlet.mvc.Controller:处理器必须实现Controller接口。ModelAndView:包含了模型数据及逻辑视图名3.9第七步:配置处理器映射器在springmvc.xml文件配置如下:beansxmlns=:xsi=:mvc=