|
Spring web mvc框架课程SpringMVC架构Spring web mvc介绍Spring web mvc和Struts2都属于 表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来: Web MVCmvc设计模式在b/s系统 下应用:1发起请求C 控制器controller作用:接收请求,响应处理结果,没有业务逻辑5 响应结果M 模型pojoservi cedao2请求业务处理V 视图 View将模型数据展示给用户4 向view中填充模型数据3返回模型注意:b/s下模型无法将数据设 置到视图中用户发起request请求至控制器(Controller)控制接收用户请求的数据,委托给模型进行处理控制器通过模型(Mo del)处理数据并得到处理结果模型通常是指业务逻辑模型处理结果返回给控制器控制器将模型数据在视图(View)中展示web中模型无法 将数据直接在视图上显示,需要通过控制器完成。如果在C/S应用中模型是可以将数据在视图中展示的。控制器将视图response响应给用 户通过视图展示给用户要的数据或处理结果。Spring web mvc 架构架构图架构流程用户发送请求至前端控制器Dispatche rServletDispatcherServlet收到请求调用HandlerMapping处理器映射器。处理器映射器根据请求url 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。DispatcherS ervlet通过HandlerAdapter处理器适配器调用处理器执行处理器(Controller,也叫后端控制器)。Contro ller执行完成返回ModelAndViewHandlerAdapter将controller执行结果ModelAndView返回 给DispatcherServletDispatcherServlet将ModelAndView传给ViewReslover视图解 析器ViewReslover解析后返回具体ViewDispatcherServlet对View进行渲染视图(即将模型数据填充至视图 中)。DispatcherServlet响应用户组件说明以下组件通常使用框架提供实现:DispatcherServlet:前端控制 器用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理 用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。HandlerMapping:处理器映射器Handle rMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件 方式,实现接口方式,注解方式等。Handler:处理器Handler 是继DispatcherServlet前端控制器的后端控制器 ,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求, 所以一般情况需要程序员根据业务需求开发Handler。HandlAdapter:处理器适配器通过HandlerAdapter对处理 器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。View Resolver:视图解析器View R esolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括: jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给 用户,需要由程序员根据业务需求开发具体的页面。商品订单业务说明本教程在通过商品订单业务学习使用springmvc进行功能开发。业务 流程1、管理员维护商品信息2、用户挑选商品,购买,创建订单数据库环境先导入sql_table.sql,再导入 sql_data.s ql脚本:如下:商品订单数据模型用户表:users记录了购买商品的用户信息Id:唯一标识一个用户订单表:orders记录了用户创建 的订单创建用户:users_id(外键)订单号创建时间订单状态 外键:users_id订单明细表:orderdetail记录了用户 购买信息所属订单:orders_id(外键)商品id:items_id(外键)商品数量商品购买价格外键:orders_id商品信息 :items记录了所有商品信息商品id:id(主键)商品名称:商品介绍商品价格外键:items_id一对多用户可以创建多个订单一对 一:一个订单只能由一个用户创建一对多一个订单包括多个购买明细一对一一个订单明细只能属于一个订单一对一一个明细对应一个商品一对多一个 商品对应多个订单明细通过订单明细表订单表和商品表建立 关系一个订单对应多个商品一个商品对应多个订单订单表和商品表是多对多关系Spr ingMVC入门需求实现商品查询列表功能。开发环境准备本教程使用Eclipse+tomcat7开发详细参考“Eclipse开发环境 配置-indigo.docx”文档第一步:建立一个Web项目在eclipse下创建动态web工程springmvc_first。第 二步:导入spring3.2.0的jar包第三步:前端控制器配置在WEB-INF\web.xml中配置前端控制器, >springmvcorg.springf ramework.web.servlet.DispatcherServlet >contextConfigLocationclass path:springmvc.xml1 load-on-startup>springmv c.action ing>load-on-startup:表示servlet随服务启动;url-pattern:.action的请交给Dispat cherServlet处理。contextConfigLocation:指定springmvc配置的加载位置,如果不指定则默认加载 WEB-INF/[DispatcherServlet 的Servlet 名字]-servlet.xml。Servlet拦截方式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成功。第四步:springmvc配置文件Springmvc默认加载WEB-INF/[前端控制器的名字] -servlet.xml,也可以在前端控制器定义处指定加载的配置文件,如下:con textConfigLocationclasspath:springmvc.x ml如上代码,通过contextConfigLocation加载classp ath下的springmvc.xml配置文件。第五步:配置处理器适配器在springmvc.xml文件配置如下: s="org.springframework.web.servlet.mvc.SimpleControllerHandlerAda pter"/> SimpleControllerHandlerAdapter:即简单控制器处理适配器,所有实现了org.sprin gframework.web.servlet.mvc.Controller 接口的Bean作为Springmvc的后端控制器。第六 步:处理器开发public class ItemList1 implements Controller {@Overridepub lic ModelAndView handleRequest(HttpServletRequest request,HttpSer vletResponse response) throws Exception {//商品列表List itemsL ist = new ArrayList();Items items_1 = new Items();items_1. setName("联想笔记本");items_1.setPrice(6000f);items_1.setDetail("Think Pad T430 联想笔记本电脑!");Items items_2 = new Items();items_2.setName(" 苹果手机");items_2.setPrice(5000f);items_2.setDetail("iphone6苹果手机!"); itemsList.add(items_1);itemsList.add(items_2);//创建modelAndView准备填 充数据、设置视图ModelAndView modelAndView = new ModelAndView();//填充数据mode lAndView.addObject("itemsList", itemsList);//视图modelAndView.setVi ewName("order/itemsList");return modelAndView;}}org.springframewo rk.web.servlet.mvc.Controller:处理器必须实现Controller 接口。ModelAndView:包 含了模型数据及逻辑视图名第七步:配置处理器映射器在springmvc.xml文件配置如下: xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLoca tion="http://www.springframework.org/schema/beans http://www.spri ngframework.org/schema/beans/spring-beans-3.2.xsd http://www.spri ngframework.org/schema/mvc http://www.springframework.org/schema/ mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/cont ext http://www.springframework.org/schema/context/spring-context- 3.2.xsd http://www.springframework.org/schema/aop http://www.spri ngframework.org/schema/aop/spring-aop-3.2.xsd http://www.springfr amework.org/schema/tx http://www.springframework.org/schema/tx/sp ring-tx-3.2.xsd "> et.handler.BeanNameUrlHandlerMapping" />BeanNameUrlHandlerMapping :表示将定义的Bean名字作为请求的url,需要将编写的controller在spring容器中进行配置,且指定bean的name 为请求的url,且必须以.action结尾。第八步:处理器配置在springmvc.xml文件配置如下:name="/items1.action":前 边配置的处理器映射器为BeanNameUrlHandlerMapping,如果请求的URL 为“上下文/items1.action ”将会成功映射到ItemList1控制器。第九步:配置视图解析器在springmvc.xml文件配置如下: value="/WEB-INF/jsp/"/> an>InternalResourceViewResolver:支持JSP视图解析viewClass:JstlView表示JSP模 板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包;prefix 和suffix:查找视图页面 的前缀和后缀,最终视图的址为:前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如 逻辑视图名为hello,则最终返回的jsp视图地址 “WEB-INF/jsp/hello.jsp”第十步:视图开发创建/WEB-I NF/jsp/order/itemsList.jsp视图页面:<%@ page language="java" contentTy pe="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib ur i="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri ="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or g/TR/html4/loose.dtd"> content="text/html; charset=UTF-8">查询商品列表< body>商品列表:商品名称 | 商品价格< /td> | 商品描述 | >${item.name } | ${item.price } | ${item.deta il } |
| | |