ref:http://www.cnblogs.com/ysocean/tag/SpringMVC%E5%85%A5%E9%97%A8%E7%B3%BB%E5%88%97/

Spring MVC的处理流程与相关组件:

  • 1:处理流程

      

  

第一步:用户发送请求到前端控制器(DispatcherServlet)。

第二步:前端控制器请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解(@Controller与@ControllerMapping)进行查找。

第三步: 处理器映射器 HandlerMapping 向前端控制器返回 Handler

第四步:前端控制器调用处理器适配器去执行 Handler

第五步:处理器适配器执行 Handler

第六步:Handler 执行完成后给适配器返回 ModelAndView

第七步:处理器适配器向前端控制器返回 ModelAndView

    ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View

第八步:前端控制器请求试图解析器去进行视图解析

    根据逻辑视图名来解析真正的视图。

第九步:试图解析器向前端控制器返回 view

第十步:前端控制器进行视图渲染

    就是将模型数据(在 ModelAndView 对象中)填充到 request 域

第十一步:前端控制器向用户响应结果
  • 相关组件的介绍:

    1、前端控制器DispatcherServlet(不需要程序员开发)。
      作用:接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。
    2、处理器映射器HandlerMapping(不需要程序员开发)。
      作用:根据请求的url查找Handler。
    3、处理器适配器HandlerAdapter(不需要程序员开发)。
      作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。
    4、处理器Handler(需要程序员开发)。
      注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
    5、视图解析器ViewResolver(不需要程序员开发)。
      作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
    6、视图View(需要程序员开发jsp)。
      注意:View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
    ps:不需要程序员开发的,需要程序员自己做一下配置即可。

Spring MVC的配置与实现(注解方式):

1、web.xml配置前端处理器DispatcherServlet:                                   

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
6 <display-name>SpringMVC_01</display-name>

<!-- 配置前端控制器DispatcherServlet -->
8 <servlet>
9 <servlet-name>springmvc</servlet-name>
10 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
11 <!--springmvc.xml 是自己创建的SpringMVC全局配置文件,用contextConfigLocation作为参数名来加载
12 如果不配置 contextConfigLocation,那么默认加载的是/WEB-INF/servlet名称-servlet.xml,在这里也就是 springmvc-servlet.xml
13 -->
14 <init-param>
15 <param-name>contextConfigLocation</param-name>
16 <param-value>classpath:springmvc.xml</param-value>
17 </init-param>
18 </servlet>
<!--拦截器-->
20 <servlet-mapping>
21 <servlet-name>springmvc</servlet-name>
22 <!--第一种配置:*.do,还可以写*.action等等,表示以.do结尾的或者以.action结尾的URL都由前端控制器DispatcherServlet来解析
23 第二种配置:/,所有访问的 URL 都由DispatcherServlet来解析,但是这里最好配置静态文件不由DispatcherServlet来解析
24 错误配置:/*,注意这里是不能这样配置的,应为如果这样写,最后转发到 jsp 页面的时候,仍然会由DispatcherServlet进行解析,
25 而这时候会找不到对应的Handler,从而报错!!!
26 -->
27 <url-pattern>/</url-pattern>
28 </servlet-mapping>
29 </web-app>

2、springmvc.xml中配置映射器、适配器、视图解析器                             

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 ...>

18 <!--注解处理器映射器 -->
19 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
20
21 <!--注解处理器适配器 -->
22 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
23
24 <!--使用mvc:annotation-driven可以代替上面的映射器和适配器
25 这里面会默认加载很多参数绑定方法,比如json转换解析器就默认加载,所以优先使用下面的配置
26 -->
27 <!-- <mvc:annotation-driven></mvc:annotation-driven> -->
28
29
30 <!--单个配置Handler -->
31 <!-- <bean class="com.ys.controller.HelloController"></bean> -->
32
33 <!--批量配置Handler,指定扫描的包全称,对该包下的注解如@Controlller@Resource等生成bean-->
34 <context:component-scan base-package="com.ys.controller"></context:component-scan>
35
36
37 <!--配置视图解析器 -->
38 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
39 <!-- 返回视图页面的前缀 -->
40 <property name="prefix" value="/WEB-INF/view/"></property><!--前后不要丢掉/-->
41 <!-- 返回页面的后缀 -->
42 <property name="suffix" value=".jsp"></property>
43 </bean>
44 </beans>

3、编写handler                                                                                

  • 注解@Controller标记一个类,那么该类就是一个SpringMVC Controller对象。
  • 注解@ControllerMapping真正实现了请求处理器。当拦截到该url时,使用对应方法进行处理,可以用在类上;
 1 package com.ys.controller;
2
3 import org.springframework.stereotype.Controller;
4 import org.springframework.web.bind.annotation.RequestMapping;
5 import org.springframework.web.servlet.ModelAndView;
6
7 //使用@Controller注解表示这个类是一个Handler
8 @Controller
9 public class HelloController {
10
11 //@RequestMapping注解括号里面的表示访问的URL,任何以/hello形式访问的路径都会交给hello方法处理;
12 @RequestMapping("hello")
13 public ModelAndView hello(){
14 ModelAndView modelView = new ModelAndView();
15 //类似于 request.setAttribute()
16 modelView.addObject("name","张三");
17 //配置返回的视图名,由于我们在springmvc.xml中配置了前缀和后缀,这里直接写视图名就好
18 modelView.setViewName("index");
19 //modelView.setViewName("/WEB-INF/view/index.jsp");注意这里是地址,不是随便起的名字
20 return modelView;
21 }
22
23 }

最后:编写index.jsp。配置Tomcat后访问:http://localhost:8080/springmvc-project-name/hello;

spring学习四:springMVC的更多相关文章

  1. 【Spring学习】SpringMVC demo搭建

    前言:今天会通过IDEA建立一个SpringMVC的demo项目,在其中会涉及到一些基础模块和相关知识,然后结合这个具体的知识点,理解清楚SpringMVC的框架原理(以图的形式展示),顺藤摸瓜分析源 ...

  2. Spring学习之SpringMVC框架快速搭建实现用户登录功能

    引用自:http://blog.csdn.net/qqhjqs/article/details/41683099?utm_source=tuicool&utm_medium=referral  ...

  3. spring学习(四) ———— 整合web项目(SSH)

    清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到. --WH 一.web项目中如何使用spring? 当tomcat启动时,就应该加载spring的配置 ...

  4. Spring学习四----------Bean的配置之Bean的配置项及作用域

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的作用域(每个作用域都是在同一个Bean容器中) 1.singleton:单例,指一个Bean容器中只存在一份(默认) 2.prototype ...

  5. Spring学习(四)--面向切面的Spring

    一.Spring--面向切面 在软件开发中,散布于应用中多处的功能被称为横切关注点(cross- cutting concern).通常来讲,这些横切关注点从概念上是与应用的业 务逻辑相分离的(但是往 ...

  6. spring学习 四 对象的创建

    spring中,有三种创建对象的方式 (1)构造创建 (2)实例工厂构造 (3)静态工厂构造 一  构造器创建 在构造器创建对象时,有无参构造和有参构造 两种 (1)在spring中,默认的是无参构造 ...

  7. spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序

    spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...

  8. Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子

    在Spring,bean可以“访问”对方通过bean配置文件指定相同或不同的引用. 1. Bean在不同的XML文件 如果是在不同XML文件中的bean,可以用一个“ref”标签,“bean”属性引用 ...

  9. Spring学习(四)

    Spring Ioc容器 1.具有依赖注入功能的容器.负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖.在Spring中BeanFactory是Ioc容器的实际代表者.BeanFactor ...

随机推荐

  1. Centos下Ambari2.7.5的编译和安装

    前言 终于,要开始写点大数据相关的文章了.当真的要开始写老本行的时候,还是考虑了挺久的.一是不知道从何处写起,二是如何能写点有意思的. 我们常说,过程比结果重要.也是有很多人喜欢准备完全之后,才会开始 ...

  2. 【转】int和Integer的区别

    int和Integer的区别: 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的 ...

  3. 商业智能BI不仅仅是报表工具,它的真正价值是:决策支持

    作为一个独立系统,商业智能BI解决两个问题.一是信息的发布,它可以在正确的时间向正确的人提供正确的信息.几十年来,我们看到的商业智能项目,至少有90%的项目成果变成了提供信息的报告.这种情况下,改变的 ...

  4. windev的弹窗详情页滚动条实现方法以及弹窗尺寸规划

    按照企业信息系统的设计习惯,我们一般将信息以列表的方式在主窗口展现,同时设置需要展现的字段,一些系统会将这个窗口称为总表页.列表页等.而信息的编辑或完整信息的查询,一般通过一个弹窗来实现,一些系统会将 ...

  5. 案例二:shell脚本获取当前日期和时间及磁盘使情况

    习题分析 本题有两个核心知识点: 1. 如何自动表示当天的日期 2. 磁盘使用情况 打印日期的命令为 date,示例命令如下: # date 2017 年 12 月 20 日 星期三 16:26:55 ...

  6. 【C# 线程】Windows系统下常见的7种I/O模型 之Overlapped I/O模型

    overview 这个字符到底是什么含义呢?其实它的意思就是当程序在等待设备操作的时候,可以继续往下做而不必阻塞到那个地方等待设备操作的返回,这就造成了程序运行和设备操作时间上的重叠.  Overla ...

  7. java 读取xlsx文件

    public class ReadExcel { public static void main(String[] args) { Workbook wb = null; Sheet sheet = ...

  8. Python:使用piecewise与curve_fit进行三段拟合

    x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14, 15,16,17,18,19,20,21], dtype=float) y = ...

  9. JZ-057-二叉树的下一个结点

    二叉树的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目链接: 二叉树的下一个结点 代 ...

  10. linux作业--第十周

    1.在阿里云服务器搭建openv-p-n(有条件的同学再做) 2.通过编译.二进制安装MySQL5.7 编译安装MySQL5.7 安装相关包 yum -y install libaio numactl ...