1、SpringMVC架构

  1、SpringMVC架构
  
  1.1 Spring web mvc 介绍
  
  spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:
  
  这里写图片描述
  
  1.2 Web MVC
  
  mvc设计模式在b/s系统下应用:
  
  这里写图片描述
  
  1、 用户发起request请求至控制器(Controller)
  
  控制接收用户请求的数据,委托给模型进行处理
  
  2、 控制器通过模型(Model)处理数据并得到处理结果
  
  模型通常是指业务逻辑
  
  3、 模型处理结果返回给控制器
  
  4、 控制器将模型数据在视图(View)中展示
  
  web中模型无法将数据直接在视图上显示,需要通过控制器完成。如果在C/S应用中模型是可以将数据在视图中展示的。
  
  5、 控制器将视图response响应给用户
  
  通过视图展示给用户要的数据或处理结果。
  
  1.3 Spring web mvc 架构
  
  这里写图片描述
  
  架构流程 :
  
  1、 用户发送请求至前端控制器DispatcherServlet
  
  2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  
  3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  
  4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  
  5、 执行处理器(Controller,也叫后端控制器)。
  
  6、 Controller执行完成返回ModelAndView
  
  7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  
  8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  
  9、 ViewReslover解析后返回具体View
  
  10、 DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
  
  11、 DispatcherServlet响应用户
  
  组件说明:
  
  以下组件通常使用框架提供实现:
  
  DispatcherServlet:前端控制器
  
  用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
  
  HandlerMapping:处理器映射器
  
  HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  
  Handler:处理器
  
  Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
  
  由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
  
  HandlAdapter:处理器适配器
  
  通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
  
  View Resolver:视图解析器
  
  View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
  
  一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
  
  2、SpringMVC入门
  
  2.1 需求
  
  实现商品查询列表功能。
  
  2.2 新建web工程
  
  新建动态web工程,在设置时可将 Default output folder 设置为 WebRoot\WEB-INF\classes ,Content directory 设置为WebRoot , 可与myeclipse兼容
  
  Java环境:jdk1.7.0_72
  
  导入spring3.2.0和必要的jar包:
  
  这里写图片描述
  
  2.3 前端控制器配置
  
  在WEB-INF\web.xml中配置前端控制器:
  
  <!-- springmvc前端控制器 -->
  
  <!-- 实际就是springmvc包提供的一个servlet类 -->
  
  <servlet>
  
  <servlet-name>springmvc</servlet-name>
  
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  
  <!-- contextConfigLocation配置springmvc加载的配置文件(用来配置处理器映射器、适配器等)
  
  如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)
  
  -->
  
  <init-param>
  
  <param-name>contextConfigLocation</param-name>
  
  <param-value>classpath:springmvc.xml</param-value>
  
  </init-param>
  
  <!-- 表示servlet随服务启动 -->
  
  <load-on-startup>1</load-on-startup>
  
  </servlet>
  
  <servlet-mapping>
  
  <servlet-name>springmvc</servlet-name>
  
  <!--
  
  第一种:*.action,访问以.action 结尾时由此servlet进行解析
  
  第二种:/,所有访问的地址都由此servlet进行解析,如果是静态文件(jpg,js,css)需要配置不让DispatcherServlet进行解析,使用此种方法可以实现RESTful风格的url
  
  第三种:/*,此设置方法错误,因为请求到Action,当action转到jsp时再次被拦截,提示不能根据jsp路径mapping成功
  
  -->
  
  <url-pattern>*.action<www.22yigouyule.cn/ /url-pattern>
  
  </servlet-mapping>
  

  
  2.4 配置处理器适配器
  
  在classpath下的springmvc.xml文件配置如下:
  
  <beans xmlns="http://www.senta77.com/
  
  xmlns:xsi="http://www.yiqianou.cn/ XMLSchema-instance"
  
  xmlns:context="hhttp://027yeshenghuowang.com/ /schema/context"
  
  xmlns:aop="http://www.xuancayule.com /schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  
  xsi:schemaLocation="http://www.yyizx.cn/ /schema/beans
  
  http://http://www.aboguanwang.com/ /beans/spring-beans-3.2.xsd
  
  http://www.dinghuiyuLe55.cn /schema/mvc
  
  http://www.anli2088.cn /schema/mvc/spring-mvc-3.2.xsd
  
  http://www.lafeiyl.cn /schema/context
  
  http://www.xuancai88c.cn /schema/context/spring-context-3.2.xsd
  
  http://www.aboyule.org /schema/aop
  
  http://www.mingchengyLe11.cn /schema/aop/spring-aop-3.2.xsd
  
  http://www.feilcheng88.cn /schema/tx
  
  http://www.120xh.cn /schema/tx/spring-tx-3.2.xsd ">
  
  <!-- 处理器适配器 -->
  
  <bean
  
  class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
  
  </beans>
  
  1
  
  2
  
  3
  
  4
  
  5
  
  6
  
  7
  
  8
  
  9
  
  10
  
  11
  
  12
  
  13
  
  14
  
  15
  
  16
  
  17
  
  18
  
  19
  
  20
  
  1
  
  2
  
  3
  
  4
  
  5
  
  6
  
  7
  
  8
  
  9
  
  10
  
  11
  
  12
  
  13
  
  14
  
  15
  
  16
  
  17
  
  18
  
  19
  
  20
  
  SimpleControllerHandlerAdapter:即简单控制器处理适配器,使用实现了org.springframework.web.servlet.mvc.Controller 接口的Handler作为
  
  Springmvc的后端控制器。
  
  2.5 Handler开发
  
  需要实现 controller接口,才能由org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter适配器执行。
  
  ModelAndView:包含了模型数据及逻辑视图名
  
  public class ItemsController1 implements Controller {
  
  @Override
  
  public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
  
  //调用service查找数据库,查询商品列表,这里使用静态数据模拟
  
  List<Items> itemsList=new ArrayList<Items>();
  
  Items items_1 = new Items();
  
  items_1.setName("联想笔记本");
  
  items_1.setPrice(6000f);
  
  items_1.setDetail("ThinkPad 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();
  
  //相当于request的setAttribut,在jsp页面中通过itemsList取数据
  
  modelAndView.addObject("itemsList",itemsList);
  
  //指定视图
  
  modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
  
  return modelAndView;

posted @ 2017-05-16 17:04  王二狗的人生  阅读(199)  评论(0编辑  收藏  举报