SpringMVC工作原理_springmvc handlermappeing-程序员宅基地

技术标签: 每日分享  Java  修真院Java小课堂  SpringMVC  后端  JAVA后端  

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能。

大家好,我是IT修真院深圳分院第13期的学员,一枚正直纯洁善良的java程序员

今天给大家分享一下,修真院官网Java任务2,深度思考中的知识点————SpringMVC工作原理

 

1.背景介绍

 

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。

这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

 

2.知识剖析

 

(1) Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

(2)它的两个核心是:

处理器映射:选择使用哪个控制器来处理请求

视图解析器:选择结果应该如何渲染

(3)通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。

2.1知识剖解

 

(1)用户发送请求到前端控制器(DispatcherServlet)。

(2)前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler)。

(3)找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)。

(4)前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。

(5)处理器适配器去执行Handler。

(6)处理器执行完给处理器适配器返回ModelAndView。

(7)处理器适配器向前端控制器返回ModelAndView。

(8)前端控制器请求视图解析器(ViewResolver)去进行视图解析。

(9)视图解析器向前端控制器返回View。

(10)前端控制器对视图进行渲染。

(11)前端控制器向用户响应结果。

 

3.常见问题

 

Springmvc的常用配置

(1)1.在web.xml中配置字符集 过滤器

 

<!-- 字符集 过滤器 -->

    <!-- 在Spring框架中是如何解决从页面传来的字符串的编码问题的呢?

    下面我们来看看Spring框架给我们提供过滤器CharacterEncodingFilter

     这个过滤器就是针对于每次浏览器请求进行过滤的,然后再其之上添加了父类没有的功能即处理字符编码。

      其中encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,

      设置为true则强制覆盖之前的编码格式。-->

    <filter>

        <filter-name>encodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <param-name>encoding</param-name>

            <param-value>UTF-8</param-value>

        </init-param>

        <init-param>

            <param-name>forceEncoding</param-name>

            <param-value>true</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>encodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

 

 

(2)在web.xml中配置DispatcherServlet

 

<!--DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet-->

    <!--DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,

    把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。-->

 

    <servlet>

        <servlet-name>spring</servlet-name> <!--在DispatcherServlet的初始化过程中,

        框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean。-->

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--指明了配置文件的文件名,不使用默认配置文件名,而使用dispatcher-servlet.xml配置文件。-->

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <!--其中<param-value>**.xml</param-value> 这里可以使用多种写法-->

            <!--1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml-->

            <!--2、<param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value>-->

            <!--3、<param-value>classpath*:dispatcher-servlet.xml</param-value>-->

            <!--4、多个值用逗号分隔-->

            <param-value>/WEB-INF/spring-servlet.xml</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup><!--是启动顺序,让这个Servlet随Servlet容器一起启动。-->

    </servlet>

    <servlet-mapping>

        <!--spring,可以有多个DispatcherServlet,是通过名字来区分的。

        每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存在ServletContext中和Request对象中.-->

        <!--ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,

        ApplicationContext则是“应用的容器”了:P,Spring把Bean放在这个容器中,在需要的时候,用getBean方法取出-->

        <servlet-name>spring</servlet-name>

        <!--Servlet拦截匹配规则可以自已定义,当映射为@RequestMapping("/user/add")时,为例,拦截哪种URL合适?-->

        <!--1、拦截*.do、*.htm, 例如:/user/add.do,这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。-->

        <!--2、拦截/,例如:/user/add,可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。

        弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。 -->

        <url-pattern>/</url-pattern><!--会拦截URL中带“/”的请求。-->

    </servlet-mapping>

 

4.解决方案

 

5.编码实战

 

demo是参考李学凯大神的,他介绍得很好,所以这里就不重复放demo了

感兴趣的同学可以去看一下

https://blog.csdn.net/qq_27093465/article/details/68961393

 

6.扩展思考

 

7.参考文献

CSDN、百度百科

 

8.更多讨论

 

(1) Springmvc常用的注解都有什么?

@Controller是必须的,常用的还有@RequestMapping,@Resource,@ResponseBody,绑定接收参数的有@RequestParam,@PathVariable等等

(2)Springmvc怎么配置HandlerMappeing?

Springmvc中使用@RequestMapping,告诉前端控制器(DispatcherServlet),请求路径与处理器的方法的对应关系。所以spring配置文件不用配置HandlerMappeing了。

(3) Springmvc中需要我们编写的有什么,哪些是被Springmvc封装好了的?

一般来说,controller和view层是需要我们自己编写的,其它大部分是被Springmvc封装好了的,所以我们可以更专注于我们的业务逻辑编写。

 

9.鸣谢:

感谢修真院的师兄和程序员宅基地上相关的作者,此教程是在他们之前技术分享的基础上完善而成。

 

10.结束语:

 

PPT链接 视频链接

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

------------------------------------------------------------------------------------------------------------
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,学习的路上不再迷茫。

技能树.IT修真院

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jnshu_it/article/details/84729958

智能推荐

解决从GitHub中下载CSF(布料模拟滤波)python源代码环境配置中出现的一些问题_python csf安装-程序员宅基地

文章浏览阅读2.2k次。解决从GitHub中下载CSF(布料模拟滤波)python源代码环境配置中出现的一些问题问题:1、环境配置出现unable to find vcvarsall.bat2、model“—CSF”has no attribute “delete_vecf”解决:安装vs2015(下面链接有安装包);复制文件夹下所有文件到安装根目录具体操作如下:1、登录GitHub,下载文件https://github.com/suyunzzz/CSF 2、将下载的文件中python文件夹下的所有文件复制到根目录下_python csf安装

c语言 linux取运行目录,c语言获取当前工作路径的实现代码(windows/linux)-程序员宅基地

文章浏览阅读1.8k次。Linux函数名: getcwd功 能: 取得当前的工作目录用 法: char *getcwd(char *buf, size_t size);函数说明: getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小。在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超过参数size大小,则回值NULL,errno的值则为ERA..._folderpath = getcwd(null, 0);

计算机竞赛满分学霸,女学霸太吓人:本科60门课全满分,北大清华上海交大,保研自己选...-程序员宅基地

文章浏览阅读495次。原标题:女学霸太吓人:本科60门课全满分,北大清华上海交大,保研自己选学霸,没有最牛,只有更牛。女学霸,更加。这个女学霸实在太吓人,本科60门课全满绩,什么叫满绩,就是分数绩点满分。分数绩点折算起来比较烦,这里不啰嗦了。反正就是专业成绩94分以上,绩点GPA满分4分了。这么好的成绩,当然保送硕士研究生,那是铁板钉钉的。而且北大、清华、上海交大三所牛逼的高校全部通过,任由她选。最终,她选择了北大,北..._罗懿行

flink进阶篇-09-状态编程和容错机制_flink 状态编程与checkpoint-程序员宅基地

文章浏览阅读572次。流式计算分为无状态和有状态两种情况。1)无状态的计算观察每个独立事件,并根据最后一个事件输出结果。例如,流处理应用程序从传感器接收温度读数,并在温度超过 90 度时发出警告。2)有状态的计算则会基于多个事件输出结果。以下是一些例子。 所有类型的窗口。例如,计算过去一小时的平均温度,就是有状态的计算。 所有用于复杂事件处理的状态机。例如,若在一分钟内收到两个相差 20 度以上的温度读数,则发出警告,这是有状态的计算。 流与流之间的所有关联操作,以及流与静态表或动态表之.._flink 状态编程与checkpoint

python自动抢单刷新太频繁_python +splinter自动刷新抢票-程序员宅基地

文章浏览阅读490次。一年一度的春运又来了,今年我自己写了个抢票脚本。python +splinter自动刷新抢票,可以成功抢到(依赖自己的网络环境太厉害,还有机器的好坏),但是感觉不是很完美,有大神请指导完善一下(或者有没有别的好点的思路)不胜感谢# -*- coding: utf-8 -*-"""@author: liuyw"""from splinter.browser import Browserfrom ti..._python脚本抢票 出现刷新过于频繁,需要验证码问题

谷歌浏览器好用的复制粘贴插件_好用到炸的谷歌chrome浏览器必备扩展插件(一)...-程序员宅基地

文章浏览阅读2.3k次。关于谷歌chrome浏览器作为鼎鼎大名的谷歌chrome浏览器,想必无人不知无人不晓吧?在浏览器市场的份额占比也是一骑绝尘,可怜我的Firefox!【哭晕在厕所了,其实我是火狐的粉丝】谷歌浏览器就一点:简洁....简洁到你无从下手,如果你已经受够了各种流氓广告启动主页等等,那么我猜第一次上手的你会感到惊艳,竟然有如此简单的浏览器。这才是一款浏览器该有的样子。它让你专注于网页本身而忘了浏览器的存在。..._chrome 自动粘贴密码的插件

随便推点

如何把python可视化到前端_python数据可视化的效果如何在web页面中展示_北京可视化股票...-程序员宅基地

文章浏览阅读1.3k次。有什么APP可以展示可视化的任务进度可视化任务进度软件,使用敬业签,具体可视有事项开始时间,进度及人、还有结束时间以及人员处理速等等,更多功能如下:1、敬业签是一款功能比较全面的桌面便签软件,分为个人便签和团队协作便签。作为一名团队便签的成员,都可以很清晰的看到自己所在的团队便签中记录的内容,作为一名管理者,可根据需求的不同,将记录的内容指派给团队便签成员。2、而团队便签的提醒功能可以让团签成员在..._不能用python对数据可视化然后再弄到网页上去展示吗?

Xilinx vivado迅雷下载地址(所有版本)-程序员宅基地

文章浏览阅读1.2w次。注:其实该方法适用于提取Xilinx官网的任意工具的任意版本的迅雷下载地址①进入Xilinx官网,进入Device-&gt;Design Tools,选择你想要下载的任意工具。②进入新web页面,右方点击“Downloads”。③进入版本选择页面,选择想要的版本号,点击相应的下载链接。④进入基于Java的Web下载页面(前提:你必须有Xilinx账户并登录)。⑤复制web浏览器地址栏的内容到文本编..._xvdieos链接

计算机接口与通讯帧格式错,计算机接口与通信第4章 串行通讯1.ppt-程序员宅基地

文章浏览阅读141次。文档介绍:第4章串行通讯足菩拄蕉飞篷脑洲佬褒冻甘唇溅冬缉崎殴贪丝荫嫂竖瑟逾开冻侩怒窟苹钵计算机接口与通信第4章串行通讯1计算机接口与通信第4章串行通讯1串行通信接口(municationInterface)按国际标准化组织提供的电气标准及协议划分为RS-232、RS-485、USB、IEEE1394等。RS-232和RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB和IE..._计算机接口与通信技术第四章ppt

基于python的深度学习框架有_《用Python实现深度学习框架》上市-程序员宅基地

文章浏览阅读198次。朋友们,《用Python实现深度学习框架》已经由人民邮电出版社出版上市了。在这本书中,我们带领读者仅用Python+Numpy实现一个基于计算图的深度学习框架MatrixSlow。本书讲解了计算图、自动求导、优化算法等框架核心功能的原理与实现,介绍了逻辑回归、全连接神经网络、FM、Wide & Deep、DeepFM、RNN、CNN等多种典型模型和网络的原理与应用,尤其注重各种模型背后的思..._matrixslow框架是什么

linux系统调用的使用例子,Linux增加系统调用步骤和实例-程序员宅基地

文章浏览阅读440次。添加系统调用步骤① 编写系统调用函数 sys_file_copy(char *,char*),然后添加到/usr/mylinux/linux-3.2.13/kernel/sys.c,也就是新内核的源程序sys.c文件末尾;② 分配系统调用号:打开/usr/mylinux/linux-3.2.13/arch/x86/include /asm/unistd_32.h,添加一行#define..._举5例说明linux系统调用的使用。

家用计算机 计算能力,超级计算机有多强大?它区别普通电脑,但也使用Windows系统...-程序员宅基地

文章浏览阅读2.1k次。原标题:超级计算机有多强大?它区别普通电脑,但也使用Windows系统个人电脑对于我们并不陌生,但在处理一些比较大的文件,有时候也会显得很吃力,但如果运算一些科学演算,就算是配置数10万的个人电脑也只是凤毛麟角了,这时候就需要一台强大的超级计算机来运算了,它比普通台式机要快百万倍,自然也拥有很强的运算能力,那么,究竟什么是超级计算机呢? 从上图可以看出2018年在世界上500台最强大的机器中,我们..._家庭超级计算机

推荐文章

热门文章

相关标签