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;

1、SpringMVC架构的更多相关文章

  1. SpringMVC 架构

    SpringMVC 架构 1. 前言 SpringMVC是目前java世界中最为广泛应用的web框架,最然从学习SpringMVC的第一个程序--helloworld至今,已有好几个年头.其间伴随着项 ...

  2. Web项目中JSP页面的一种调试方法与出现的问题 -- SpringMVC架构测试

    在前端开发中,尤其是MVC架构多人开发,负责前端的童鞋总是需要做静态页面,再和后台连接前无法使用变量如EL表达式等测试功能,所以本人引入了一个模板jsp数据测试专用文件,专门配置所有的变量,然后在待测 ...

  3. SpringMvc架构下css、js、jpg加载失败问题

    SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...

  4. SpringMVC学习笔记之一(SpringMVC架构及与Mybatis整合)

    一.SpringMVC入门 1.1Springmvc是什么 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如 ...

  5. springMVC课程笔记(一)springMVC架构原理分析

    一.springMVC架构原理分析 1.先搞清楚什么是springMVC: 其实springMVC是spring框架中的一个模块,springMVC和spring无需通过中间整合层整合,SpringM ...

  6. SpringMVC架构实现原理

    SpringMVC架构实现原理 一.SpringMVC介绍 Spring mvc是一个基于mvc的web框架.其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Ser ...

  7. SpringMVC架构&组件&执行流程

    SpringMVC架构: 组件: DIspatcherServlet:前端控制器.相当于mvc模式的c,是整个流程控制的中心,负责调用其他组件处理用户的请求,降低了组件之间的耦合性. HandlerM ...

  8. SpringMVC架构(一)

    SpringMVC架构 1.1Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来 ...

  9. 纯手写SpringMVC架构,用注解实现springmvc过程

    1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping 第二步:完成对应的anno ...

随机推荐

  1. python-socket1

    如何理解socket编程 就是两个进程,跨计算机,他俩需要通讯的话,需要通过网络对接起来.这就是 socket 的作用.打个比方吧,两个进程在两个计算机上,需要有一个进程做被动方,叫做服务器.另一个做 ...

  2. PHP 写入缓存

    1.创建file.PHP <?php class File{ //封装方法 private $_dir; const EXT='.text';//文件后缀,定义为常量 public functi ...

  3. 直播推流实现RTMP协议的一些注意事项

    —— 2017-2-12 更新RTMP 协议整理了一下,包括rtmp 消息类型,rtmp 如何分块,rtmp分块例子. 用脑图整理了一下,使用Xmind 打开,URL: https://github. ...

  4. windows 2013 datacenter 安装sql server2008 r2兼容性

    add-windowsfeature RSAT-Clustering-AutomationServer

  5. test20190611 NOIP模拟赛

    题一:答题比赛 [问题描述] YYH报名参加了一个特殊的电视问答节目.这个节目共有n个问题,每回答正确1题,YYH就会获得1分,而每当YYH连续答对k题,那么他的现有得分乘以2,注意答对第k题后,是先 ...

  6. android开发 MyEclipse下测试连接MySQL数据库

    1.首先要加载MySQL驱动包. 步骤:右击项目找到build path->configure build path->libraries——>add External JARs添加 ...

  7. WPF如何更改系统控件的默认高亮颜色 (Highlight brush)

    我们在用WPF时, 经常会对系统控件的默认高亮等等颜色进行更改. 以前通常是用controlTemplate来实现. 今天发现一个更合理或者简单的方法: 用系统默认颜色的key, 比如 SystemC ...

  8. UDK编辑器 49条小提示

    转自:http://www.cnblogs.com/hmxp8/archive/2012/02/09/2343674.html Very Helpful~ 01. First time using t ...

  9. qt程序异常结束crashed

    今天调试以前写的opencv的程序发现每次一点运行就报错误 Starting D:\Qt\QProjects\build-HelloWorld-lian-Debug\debug\HelloWorld. ...

  10. 关于cin

    今天同学调试一个简单的程序的时候发现了问题,我们两个讨论的时候弄出了好多乐子 #include <iostream> using namespace std; int main() { ; ...