《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置

上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了。这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置。

一、执行流程

来解释一下上图中的各个名词 1、DispatcherServlet:SpringMVC的中央调度器,负责所有任务的调度。 2、HandlerMapping:处理器映射器 3、HandlerAdapter:处理器适配器 4、Handler:处理器(咱们自己写的Controller) 5、ViewResolver:视图解析器 6、View:视图 流程: 当用户在浏览器中提交请求后首先进入我们的中央调度器,由中央调度器依次调用上图中的2、3、6、7步然后再返回到客户端。 2步骤:由中央调度器将请求交给处理器映射器,从而在处理器映射器中得到requestMapping和类的对应关系。 3步骤:中央调度器得到requestMapping和类的对应关系后,将该关系Map交给处理器适配器,由处理器适配器来调用具体的requestMapping对应的类的handleRequest方法。并在handleRequest方法执行后,返回给处理器适配器一个ModelAndView对象。 6步骤:中央调度器得到ModelAndView对象后,将ModelAndView对象交给ViewResolver视图解析器来进行视图的解析,将ModelAndView中的Model放到requestScope中。 7步骤:中央调度器进行视图渲染,渲染后并返回给用户。

二、DispatcherServlet默认配置 很多人可能会问了,既然HandlerMapping、HandlerAdapter、ViewResolver这些在SpringMVC中扮演的角色这么重要,为什么我们并没有用到呢。甚至在配置里也并没有进行配置。其实就算我们不配置,SrpingMVC也有自己一套默认的配置。具体在spring-webmvc-4.3.9.RELEASE.jar中有个DispatcherServlet.properties的配置文件。如下图:

注意:在上图中Key是SpringMVC的接口,后面是该接口在运行时需要加载的具体实现类。如果没有进行配置HandlerMapping、HandlerAdapter、ViewResolver则按该配置上的默认方式进行加载与执行。

三、配置视图解析器 来看我们的MyController,里面有

mv.setViewName("/WEB-INF/jsp/welcome.jsp");

如果我们的系统中Controller有很多,每一个都这样来写,那/WEB-INF/jsp/这部分前缀和.jsp这部分后缀就会产生一定的冗余。所以我们要将这部分前缀和后缀配置到springmvc.xml中,让SpringMVC自己在内部进行拼接。这样能减少一定的冗余。接下来我们来修改springmvc.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 注册视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
        
    <!-- 注册SpringMVC处理器 -->
    <bean id="/my.do" class="cn.wechatbao.controller.MyController"></bean>
</beans>

修改MyController中的handleRequest中的mv.setViewName("/WEB-INF/jsp/welcome.jsp");为mv.setViewName("welcome");重新发布程序并运行能得到相同的结果。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Brian

Ubuntu 16.04 安装VNC

---- 安装 安装X11VNC sudo apt install x11vnc -y 配置访问密码: sudo x11vnc -storepasswd /...

3783
来自专栏流柯技术学院

Jenkins不同job之间传递参数

在A项目配置面板中Post-build Actions选项中选择Trigger parameterized build on other projects ...

1092
来自专栏Spring相关

第2章—装配Bean—通过java代码装配bean

​ 在进行显式装配的时候,有两种选型方案:java和XML配置,这里先介绍java的配置方式.

992
来自专栏java工会

一文搞懂spring工作的流程

1455
来自专栏java架构师

storm基础系列之五---------接入数据收集系统flume

1.基本结构介绍   flume是三层架构,agent,collector,storage。每一层都可水平扩展。   其中,agent就是数据采集方;colle...

3039
来自专栏JAVA同学会

Spring Cloud配置中心(Config)

Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件。比如:配置中心、Eureka服务发现、 消息总线、熔断机制等。

1423
来自专栏别先生

creating server tcp listening socket 127.0.0.1:6379: bind No error

参考链接:https://blog.csdn.net/n_fly/article/details/52692480

1621
来自专栏Java技术栈

Spring Boot核心配置

启动类 在包根目录下添加启动类,必须包含main方法,再添加Spring Boot启动方法: SpringApplication.run(SampleContr...

3536
来自专栏EarlGrey的专栏

如何在 Ubuntu16.04 中用 Apache 部署 Jenkins 自动化服务器

在这篇指南中,作者会向你介绍如何在 Ubuntu 16.04 中安装最新版本的 Jenkins。我们会用自己的域名运行 Jenkins,在 apache web...

4120
来自专栏王磊的博客

Spring Boot 最佳实践(二)集成Jsp与生产环境部署

提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用...

2485

扫码关注云+社区

领取腾讯云代金券