SpringMVC也叫spring web mvc,属于表现层的框架,是Spring框架的一部分。

Spring  MVC请求流程图:

request-------->DispatcherServler(中央调度器/前端控制器)----->
HandlerMapping(处理器映射器)------>返回一个执行链----->将执行链转交给HandlerAdaptor(处理器适配器)----->调度Handler(处理器)----->
ModelAndView----->先将结果交给HandlerAdaptor,然后再由HandlerAdaptor转交给 DispatcherServler--------->DispatcherServler调度ViewResolver(视图解析器)---->交给DispatcherServler------->
寻找View---->View做出响应(response)

关于urlpattern说法

最好配成*.do
不能配成/*      无法访问*.jsp等动态资源
最好也不要配成/   无法访问静态资源
不得不配成/
一切源于Restful编程  rest

不能配置为/*

DispatcherServlet会将向动态页面请求,即向jsp页面的跳转请求也当做是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然是找不到的。jsp页面会报404错误
结论:/*会拦截动态资源

不得不配成/

方案一:使用Tomcat默认的Servlet解决

方案二:使用MVC的default-servlet-handler

会将对静态资源的访问请求通过HandlerMapping映射到默认Servlet请求处理器DefaultServletRequestHandler对象。而该处理器调用了Tomcat的DefaultServlet来处理静态资源的访问请求。当然需要引入mvc约束

  1. <!--将静态资源交流系统默认的servlet处理-->
  2. <mvc:default-servlet-handler/>
  1.  

方式三:使用MVC的resource解决

在Spring3.0.4之后,Spring定义了专门用于处理静态资源请求的处理器ResourceHttpRequestHandler。并且添加了<mvc:resources/>标签,专门用于解决静态资源无法访问问题。

  1. <!--方式三:使用SPring3之后自己提供的处理器,处理静态资源-->
  2. <mvc:resources mapping="/img/**" location="/img/"></mvc:resources>

Location:静态资源所在目录
mapping: 对资源的请求
注意:需要Tomcat7支持

Spring MVC环境搭配 (兼第一个案例)

在MyEclipse中新建Web Project后,使用Spring MVC框架的步骤如下:

(1)引入jar文件

下载需要的jar文件:    spring-web-3.2.13.RELEASE.jar:在web应用开发时使用Spring框架所需的核心类。

spreing-webmvc-3.2.13.RELEASE.jar:Spring MVC框架相关的所有类,包含框架的servlets,Web MVC框架,以及对控制器和视图的支持。

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-webmvc</artifactId>
  4. <version>3.2.13.RELEASE</version>
  5. </dependency>
  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-web</artifactId>
  4. <version>4.3.9.RELEASE</version>
  5. </dependency>

(2)Spring MVC配置:

*在web.xml中配置Servlet,定义DispatcherServlet.

Spring MVC是基于Servlet的,DispatcherServlet是整个Spring MVC框架的核心,它负责截获请求并将其分派给相应的处理器处理。

  1. <!--配置Spring MVC的核心控制器DispatcherServlet-->
  2. <servlet>
  3. <servlet-name>springmvc</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. <!--初始化参数-->
  6. <init-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:spring.xml</param-value>
  9. </init-param>
  10. <load-on-startup>1</load-on-startup> 只要tomcat一启动就将servlet创建好,并存入内存。
  11. </servlet>
  12.  
  13. <servlet-mapping>
  14. <servlet-name>springmvc</servlet-name>
  15. <url-pattern>/</url-pattern>
  16. </servlet-mapping>

*创建Spring MVC的配置文件(springmvc-servlet.xml)

  1. xmlns:mvc="http://www.springframework.org/schema/mvc"
  1. http://www.springframework.org/schema/mvc
  2. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  1. <!--将静态资源交流系统默认的servlet处理-->
  2. <!-- <mvc:default-servlet-handler/> -->
  3. <!--方式三:使用SPring3之后自己提供的处理器,处理静态资源-->
  4. <!--<mvc:resources mapping="/img/**" location="/img/"></mvc:resources>-->
  5. <!--处理器映射器-->
  6. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
  1. <!--注册处理器-->
  2. <bean id="/hello.do" class="cn.happy.controller.Onecontriller"></bean>
  3.  
  4. <!--视图解析器-->
  5. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  6. <property name="prefix" value="/WEB-INF/"></property>
  7. <property name="suffix" value=".jsp"></property>
  8. </bean>
  1.  3)创建Controller(处理请求的控制器)
  1. src下创建cn.happy.controller包,并在该包下新建Onecontriller类,该类需要继承org.springframework.web.servlet.mvc.Controller;并实现返回值是ModelAndViewhandleRequest方法。
  1. public class Onecontriller implements Controller {
  2. public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
  3. ModelAndView mv=new ModelAndView();
  1. mv.addObject("uname","啦啦啦啦"); // 如图二
  1. mv.setViewName("index"); return mv; }}
  1. (4)创建View
  1. WEB-INF下创建一个index.jsp页面
  1. <body>
  2. <h3>人生若是无误,铅笔何需橡皮!${uname}</h3>
  3. <img src="${pageContext.request.contextPath}/img/1.jpg">
  4. </body>

SpriingMVC执行流程结构的更多相关文章

  1. 流程控制:顺序结构: 代码默认从上到下依次执行 分支结构: 细分在分为如下 循环结构: while .. for ..

    # ### 流程控制: ''' 流程: 代码执行的过程 流程控制: 对代码执行的过程进行管控 顺序结构: 代码默认从上到下依次执行 分支结构: 细分在分为如下 循环结构: while .. for . ...

  2. Dalvik虚拟机java方法执行流程和Method结构体分析

    Method结构体是啥? 在Dalvik虚拟机内部,每个Java方法都有一个对应的Method结构体,虚拟机根据此结构体获取方法的所有信息. Method结构体是怎样定义的? 此结构体在不同的andr ...

  3. Android开发第一讲之目录结构和程序的执行流程

    1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...

  4. 040 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 02 while循环的执行流程

    040 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 02 while循环的执行流程 本文知识点:while循环的执行流程 三种循环结构中的第一种--wh ...

  5. 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序

    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...

  6. 轻量级前端MVVM框架avalon - 执行流程2

    接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...

  7. ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程

    ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问 http://<serverIp>/My/index.php/Index/s ...

  8. PHP解释器引擎执行流程 - [ PHP内核学习 ]

    catalogue . SAPI接口 . PHP CLI模式解释执行脚本流程 . PHP Zend Complile/Execute函数接口化(Hook Call架构基础) 1. SAPI接口 PHP ...

  9. (一)熟悉执行流程——基于ThinkPHP3.2的内容管理框架OneThink学习

    ThinkPHP作为国内具有代表性的PHP框架,经过多年的发展,受到越来越多公司与开发者的青睐.我也在忙里偷闲中抽出部分时间,来学习这个优秀的框架.在开始学习这个框架时,最好通过实例来学习,更容易结合 ...

随机推荐

  1. 【LeetCode】031. Next Permutation

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  2. 一个节点rac+单节点dg网络配置(listener.ora与tnsnames.ora)

    环境说明:  实验环境是 一个节点的 rac + 单机dg    (主备全部用asm存储) tnsnames.ora  文件  (oracle用户) node 1 : node1-> pwd / ...

  3. TPS与QPS

    一.TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数.TPS包括一条消息入和一条消息出,加上一次用户数据库访问.(业务TPS = CAPS × ...

  4. 【238】◀▶IEW-Unit03

    Unit 3 Media 柱状图 1.图片及model1分析 The graph below contains information about the average science test s ...

  5. 微软企业库的&nbsp;注入和依赖&amp;nbs…

    Working with ObjectBuilder This topic has not yet been rated - Rate this topic Retired Content This ...

  6. ADT-Bundle--Android开发环境快速搭建

    http://blog.csdn.net/aizquan/article/details/8974750

  7. HeapCreate

    为进程创建新堆,请求分配虚拟内存分页,函数原型如下: HANDLE HeapCreate( DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximu ...

  8. C#连接Oracle数据库解决报错(需要安装Oracle客户端软件8.1.7)的问题

    1.通过nuget安装  ManagedDataAccess 2.引用 using Oracle.ManagedDataAccess.Client; 注:最低framework4.0 测试连接: // ...

  9. CLR via C# 第五章学习记录(更新中)

    1.设置全局溢出检查,项目属性->生成->高级->检测运算上溢/下溢 2.局部使用溢出检测 Byte b = ; b = ));// 不检测溢出 checked// 检测溢出代码段 ...

  10. 第6章 图的学习总结(邻接矩阵&邻接表)

    我觉得图这一章的学习内容更有难度,其实图可以说是树结构更为普通的表现形式,它的每个元素都可以与多个元素之间相关联,所以结构比树更复杂,然而越复杂的数据结构在现实中用途就越大了,功能与用途密切联系,所以 ...