SpringMVC是什么?
一,首先是一个MVC框架。
在web模型中,MVC是一种很流行的框架,通过把Model,View,Controller分离,把较为复杂的web应用分成逻辑清晰的几部分,是为了简化开发,减少出错。还是为了组内开发人员之间的配合。总之就是一种分层工作的办法。
二,springMVC,是spring的一个子框架,当然拥有spring的特性,如依赖注入。
三,springMVC的信息流是什么样的?
首先用户通过HTTP请求到服务器,服务器会根据你的url来将请求转到不同的控制器Controller。这是第一步,具体需要做的是在web.xml中设置URLpattern映射到spring的DispatcherServlet,这是控制器是负责第一道处理,用来转发请求的,它会将请求转发到合适的Controller上。那么问题来了,它是根据什么转发呢?这个问题有些混乱,原因是springMVC一直在升级,不断贡献新的url到Controller的映射方法。但是万变不离其宗,不管如何变,它的目的都不变,就是设法建立url到Controller的映射,找到这个目的之后,看起来就容易一些。具体来看,
方法1,在springmvc的配置文件中,直接将bean的name写成一个url,如
<bean name=”/product_input” class="com.ap.ProductInputController" />
通过这句配置,就直接将/product_input这url的请求转发到了ProductInputController这个类上。
注:但是这个方法被认为是老套的方法,现在已经不流行了。了解就可以,现在推荐的是注解的方式,即方法2的方式。
方法2,这种方式,在给Controller命名时,就可以无所谓了, 它的映射不是依赖这个名字,所以可以像下面这种方式来写这个bean的配置,可以随便起一个,如
<bean name=”product” class="com".ap.ProductInputController />
到这里,显然还是没有实现url到Controller的映射,因为url都还没看见呢,
现在的springMVC有一个注解是RequestMapping,专门负责映射url的,比方说需要映射到ProductInputController的 addProduct()这个方法,只需要在这个方法上加上一个注解,如
@RequestMapping(name=”product_input”)
addProduct()
通过这个注解,就可以将product_input这个url映射到addProduct这个方法了。是不是很简单。其实做的事情都一样,只不过是换了一种写法和位置。
感觉好神奇的样子,我一开始也有这种感觉,直到我了解了原始Servlet是如何将url和处理业务的类联系起来的,才发现这个过程也没有那么神秘,这里推荐一本书《SpringMVC学习指南》 Paul Deck著,适合0基础的人看,例子很详细。
我大概说一下url到Controller是怎么回事:
起点是,用户通过HTTP请求了服务器,那么一定就有URL,比方说是http://www.dudu.com/getName,其中getName就是我的url,假设你的servlet是部署在tomcat中的,在web.xml这个配置文件中,应该有url到某个类的关系,或者通过别的注解的方法 如@Webservlet(name= “xxController”, urlPatterns = {“product_input”}), 这里意思就是这个url进来后,把请求交给xxController这个class去处理,这个类继承了HttpServlet, 并且重写的doGet方法,你的请求就会来到这个方法里,然后,在方法内调用request.getRequestURI这个方法,拿到了你的url=getName,之后就是字符串匹配equals,调用后面具体的类。
我们使用框架的原因,就是在开发中,这样的步骤都是重复的,而且每次都一样,所以写框架的人,就把这样套路式的代码封装了, 细节都交给他来处理,我们只要做两件和自己业务相关的事,一个是确定url,二是,这个url指向那个类。写到这里基本把url到Controller这件事说完了。这里有两个类一个是DispatcherServlet,这个是SpringMVC框架自带的,一个就是你自己处理业务的类,比如是ProductController。控制器的命名都喜欢叫XXXController。下面画一张图说明这一步
四,MVC,先说的居然是C,Controller,下面说View,就是视图,展示。用户的浏览器,看到的都是比较美观的网页,这就是HTML,它负责来将苦涩的数据,展现成各种样式,让普通用户看起来也不错,而不是一堆JSON数据。用户的请求进来之后,肯定还是要返回给用户页面的,这每个页面就是一个VIEW,view就像一个网页的框架,某个页面的框架是固定的,不同的是其中的数据。比方说购物车页面,就是一个框架。那你的购物车和我的大体看起来是一样的,但其中的具体内容不同,因为买的商品不同,而这具体的东西,或叫做数据,就是Model。现在M和V就有了。
下面再串一个这个流程,刚才说到请求已经到了Controller,这个类的作用就是1,选择适当的view返回给用户,2,组织数据,即生成Model。网络传输和信息技术主要处理的就是数据,而现在数据就放在Model中,或者把放数据的地方叫做Model,比如用户在请求查询用户信息,那么Controller做的就是,在数据库中找到这些信息,然后把信息添加到Model中,然后把Model和对应的View一起返回给DispatcherServlet。 这里继续补充上一张图:
五,现在DispatcherServlet已经拿到Model里的数据和该用哪个View来展示给用户了。
所以会将Model和View融合,具体就是用Model的数据把View的变量都换成具体的值,然后view就变成一个HTML的页面了,最后把这个HTML返回给用户,用户那边用浏览器来解释HTML,看到就是正常的网页。 全过程结束。
SpringMVC是什么?的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Springmvc数据校验
步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
- redis集成到Springmvc中及使用实例
redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...
- 流程开发Activiti 与SpringMVC整合实例
流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
- springMVC初探--环境搭建和第一个HelloWorld简单项目
注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...
- springmvc的拦截器
什么是拦截器 java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...
随机推荐
- ansj 2.0.7 错误例子分析
我在做一个solr的项目,分词选定了ansj分词. 选择ansj的原因: 1)身边若干朋友的念叨,说是效果不错 2)网上看了若干评论,说是不错 3)自己尝试了一些case,觉得确实不错. 好了,项目中 ...
- js数据类型:引用和5种基本数据类型
javascript有2种基本数据类型:引用和基本数据类型 基本数据类型又有5个分类:布尔型.字符串.数值.undefined.NULL.
- JSON的服务器开发之路
JSON的服务器开发之路 不知道需要哪儿些包... /dcywpt/WebRoot/WEB-INF/lib/commons-collections-3.2.jar /dcywpt/WebRoot/WE ...
- Java中的枚举的治理
版权声明:本文为博主原创文章,转载请注明出处,欢迎使劲喷 一.为啥用枚举&为啥要对枚举进行治理 1.先来说说为啥用枚举 表中某个字段标识了这条记录的状态,我们往往使用一些code值来标识,例如 ...
- android:layout_gravity和android:gravity属性的区别1
一.介绍: gravity的中文意思就是"重心",就是表示view横向和纵向的停靠位置 (1).android:gravity:是对view控件本身来说的,是用来设置view本身的 ...
- NSTimer的精确度
1.iOS中一般UI上面常用两种定时器 NSTimer和CADisplayLink,那么它们分别的精确度是如何呢? CADisplayLink 是用于帧刷新定时器,也就是和界面的刷新率保持一致,理想情 ...
- idea调试SpringMvc, 出现:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener错误的解决办法
有时,使用idea开发SpringMvc发现调试时出现以下错误: 12-Mar-2017 12:08:02.345 严重 [RMI TCP Connection(2)-127.0.0.1] org.a ...
- 关于mui选择器的使用
使用mui引入选择器的picker.js.poppicker.js.及他们的css文件之后引入代码与点击确定之后的状态: document.querySelector('#osex').addEven ...
- iOS SnapKit自动布局使用详解
对于自动布局: 我们在 StoryBoard 中可以使用约束实现,简单明了,但如果用纯代码来设置约束就很麻烦了 OC里面,我们常用的有Masonry,SDAutoLayout Swift里,我们有Sn ...
- IIS7 / IIS7.5 URL 重写 HTTP 重定向到 HTTPS
1.购买SSL证书,参考:http://www.cnblogs.com/yipu/p/3722135.html 2.IIS7 / IIS 7.5 下绑定 HTTPS 网站(购买Wildcard SSL ...