SpringMVC 架构
SpringMVC 架构
1. 前言
SpringMVC是目前java世界中最为广泛应用的web框架,最然从学习SpringMVC的第一个程序--helloworld至今,已有好几个年头。其间伴随着项目的同时找资料,看文档,也涉猎过部分源代码,基本明白了SpringMVC是怎么回事,遇到需求知道如何写代码,在哪写代码。但是对SpringMVC并没有深入理解,并没有一个系统的认识。对于涉及到配置或工作原理时,就显得有些局促。尤其是SpringBoot用得越来越多,简化了大量的配置,在一些比较高级的用法的时候感觉有点莫名奇妙,不知所以。所以,最近准备系统研究下web开发中大行其道的SpringMVC.
2. 顶级架构模式
当前主流的web mvc框架大都使用的是前端控制器模式(FrontController),什么是前端控制器模式呢?
前端控制器模式提供了一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做一个通用的控制,如认证,授权,记录日至或者跟踪请求,然后将请求传递给响应的处理程序。以下是这种设计模式的主要组成部分:
- 前端控制器(Front Controller):处理应用程序所有类型的请求,进行统一处理,解析请求参数,将请求发送给具体的Controller处理。
- 调度器(Dispatcher/Controller):接收前端控制器的调度,调用相关对象处理请求。
- 视图模板(ViewTemplate):为响应请求而创建的模型视图对象。
3. 顶级架构视图
4.架构实现流程
- SpringMVC使用一个Servlet(DispacherServlet)代理所有的请求,详见前端控制器模式。将请求发送给对应的处理器处理,较好的分离了每一个处理器的职责。
- 为什么使用HandlerAdapter?
SpringMVC中的处理器是方法级别的处理器,而非类级别的处理,这样只要不定义类变量,就很容易在单例的情况下保证线程安全。同时对处理器进行统一封装,最大程度重用代码。
5.再谈体系结构
SpringMVC 架构的更多相关文章
- Web项目中JSP页面的一种调试方法与出现的问题 -- SpringMVC架构测试
在前端开发中,尤其是MVC架构多人开发,负责前端的童鞋总是需要做静态页面,再和后台连接前无法使用变量如EL表达式等测试功能,所以本人引入了一个模板jsp数据测试专用文件,专门配置所有的变量,然后在待测 ...
- SpringMvc架构下css、js、jpg加载失败问题
SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...
- SpringMVC学习笔记之一(SpringMVC架构及与Mybatis整合)
一.SpringMVC入门 1.1Springmvc是什么 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如 ...
- 1、SpringMVC架构
1.SpringMVC架构 1.1 Spring web mvc 介绍 spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中 ...
- springMVC课程笔记(一)springMVC架构原理分析
一.springMVC架构原理分析 1.先搞清楚什么是springMVC: 其实springMVC是spring框架中的一个模块,springMVC和spring无需通过中间整合层整合,SpringM ...
- SpringMVC架构实现原理
SpringMVC架构实现原理 一.SpringMVC介绍 Spring mvc是一个基于mvc的web框架.其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Ser ...
- SpringMVC架构&组件&执行流程
SpringMVC架构: 组件: DIspatcherServlet:前端控制器.相当于mvc模式的c,是整个流程控制的中心,负责调用其他组件处理用户的请求,降低了组件之间的耦合性. HandlerM ...
- SpringMVC架构(一)
SpringMVC架构 1.1Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来 ...
- 纯手写SpringMVC架构,用注解实现springmvc过程
1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping 第二步:完成对应的anno ...
随机推荐
- node.js 基础学习笔记1
1. node -v 查看版本 node -e --js代码 node --进入编辑模式 Ctrl+C 退出编译模式 var http=require('http') http.createServe ...
- Revenge of Nim hdu 4994 (博弈)
http://acm.split.hdu.edu.cn/showproblem.php?pid=4994 题意:现在有两个人在取石子,共有n堆石子,每堆石子取完后才可以取下一堆石子,最后一个取石子的人 ...
- 如何在Ubuntu上更新Node.js
自己系统上一直用的1.0版本的,想要更新直接apt肯定不行的.于是找了一种比较方便的安装方式. 如果想安装最新的 6.x 版本 只需要 #Using Ubuntu curl -sL https://d ...
- SAS文档:简单的随机点名器
本次实验,我们设计了一个简单的随机点名系统,下面我来介绍一下它的SRS文档. 1.功能需求: 1.1 模块1 在此模块中,我们设置了RandomName类,创建一个随机点名器,里面加入了所在课程的名单 ...
- php get_magic_quotes_gpc()函数
magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊 ...
- 乐视云计算基于OpenStack的IaaS实践
本文作者岳龙广,现在就职于乐视云计算有限公司,负责IaaS部门的工作. 从开始工作就混在开源世界里,在虚拟化方面做过CloudStack/Ovirt开发,现在是做以OpenStack为基础的乐视云平台 ...
- ubuntu14安装java8
http://ubuntuhandbook.org/index.php/2015/01/install-openjdk-8-ubuntu-14-04-12-04-lts/
- mysql 统计
每周: select count(*) as cnt,week(editdate) as weekflg from projects where year(editdate)=2007 group b ...
- SublimeText为啥选择Python开发extension
真正优秀的软件是靠优秀的程序员开发出来的,反过来也一样,优秀的语言,平台,工具只有在优秀的程序员的手中才能显现出它的威力. 比如,Jon Skinner开发的SublimeText.桌面应用一般支持二 ...
- java读取属性文件propertie中文乱码问题
在属性文件中使用Unicode编码中文 propertie文件默认编辑就是Unicode编码