文档章节

深入理解springMVC

J
 Java填坑之路
发布于 07/17 13:17
字数 1420
阅读 7
收藏 0

什么是spring MVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2(一般老项目使用)等。

spring mvc简介

springmvc是spring的一个模块,提供web层解决方案(基于mvc设计架构)

采用springmvc的好处

Spring MVC中提供一个DispatcherServlet, 无需额外开发。

springMVC中使用基于xml的配置文件,可以编辑,无需重新编译应用程序。

springMVC实例化控制器,并根据用户输入来构造bean。

springMVC可以自动绑定用户输入,并正确的转换数据类型。例如,springMVC能自动解析字 符串,并设置float或decimal类型的属性。

springMVC可以检验用户输入,若校验不通过,则重定向回输入表单。输入校验是可选的, 支持编码方式以及声明。关于这一点,springMVC内置了常见的校验器。

springMVC是spring框架的一部分。可以利用spring提供的其它能力。

springMVC支持国际化和本地化,支持根据用户区域显示多国语言。

springMVC支持多种视图技术,最常见的JSP技术以及其它技术包括Velocity和FreeMarker。

使用springMVC的优势

1、清晰的角色分配: 前段控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping),  处理器适配器(HandlerAdapter), 视图解析器(ViewResolver),

处理器和页面控制器(Controller),验证器(Validator),命令对象(Command),

表单对象(FromObject)

2、分工明细

3、和Spring框架无缝结合

spring mvc框架流程图

SpringMvc整个的执行流程:

1、发起请求到前端控制器(DispatcherServlet )

2、前端控制器请求HandlerMapping查找Handler(可以根据xml、注解进行查找)

3、处理器映射器HandlerMapping向前端控制器DispatcherServlet 返回Handler

4、前端控制器DispatcherServlet 调用处理器适配器HandlerAdapter 执行Handler

5、处理器适配器HandlerAdapter 执行Handler

6、Handler执行完给处理器适配器返回ModelAndView

7、处理器适配器向前端控制器返回ModelAndView (ModelAndView 是SpringMvc的底层对象 包括model和view)

8、前端控制器请求视图解析器去解析视图

  根据逻辑视图名解析成真正的视图(jsp)

9、视图解析器向前端控制器返回view

10、前端控制器进行视图渲染

  视图渲染将模型数据(模型数据在ModelAndView对象中)填充到request域

11、前端控制器向用户响应结果

组件:

1、前端控制器DispatcherServlet(不需要程序员开发)

作用接收请求,响应结果,相当于转发器,中央处理器。

有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)

作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

5、视图解析器View resolver(不需要程序员开发)

作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

6、视图View(需要程序员开发jsp)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

springMVC常用注解

1. 在 struts-config.xml 文件中加入

 

2.在 applicationContext.xml 文件中加入

 

3.cn.base.GetPersonListAction 实现请求响应代码

可以看出一次请求需求如此多的步骤,在加上一个项目下来有很多这样的请求响应,将给配置文件管理带来很大的麻烦。

经过对 Spring 的深入应用, Spring 本身提供的 URL 请求控制,对其天然支持可以让我们不需要 applicationContext.xml 再次声明一次 URL 请求 Bean ,即减少了 Struts 的声明 URL ,达到减少些繁琐的配置。但只是少了一些而已,同样也会面临着配置文件的管理问题。

Spring 注解将给我们的工作带来些轻松,利用反射机制原理出现的注解就是为了解决配置大量的配置问题。请看下处理一次简单的请求响应代码

@Controller --声明控制器

@RequestMapping("/person") –声明URL

public class PersonControl extends BaseController {

@Autowired –业务接口注入

private personServices personServices;/*** 获得人员列表*@param request* @param response* @throws Exception*/

@RequestMapping(params = "method=geList") --即处理/person.do? method=geList方法

public void getnodeList(HttpServletRequest request,HttpServletResponse response) throws Exception { //处理请求//处理响应}}

可以看出,在代码上加入注解可以省去我们上面说的多个配置文件的工作,达到简便的 MVC 处理请求响应。

再配上简单的配置文件声明,即可轻松处理项目的全部请求控制工作。


欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导
 

© 著作权归作者所有

共有 人打赏支持
J
粉丝 0
博文 23
码字总数 64801
作品 0
湘潭
Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD
2016/12/01
55
0
章三、Spring+Jersey搭建REST服务器

前两章已经写了如何使用jersey搭建REST接口服务器,本章将简单讲解如何使用jersey+Spring搭建REST接口服务器。 1、服务器 1.1 导入所需JAR包 jersey相关包的maven依赖 <!-- jersey客户端需要...

十月阳光
2015/04/21
0
0
福利丨微服务这么火,可你了解它背后的技术关键吗?

近年来,微服务就像一把燎原的大火,突然窜了出来,并迅速在整个技术圈燃烧开去。可为什么微服务这么火,它又能给企业带来什么价值?很多时候我们都是只知其一,不知其二。 今天,小编为小伙...

DBAplus社群
2016/12/14
0
0
struts+spring+hibernate 整合spring security 2.X

好吧!在这个夜深人静的时候,既然没有睡意,那就刚好整理一个我的博文,osc挺好的,以后技术博文就在这里整理了!前几天因为项目需求spring security 机制,所以就自己研究了一下,到官方下...

Beyond-Bit
2012/07/01
0
4
学习Spring框架等技术的方向、方法和动机

学习Spring框架 最早学习Spring框架是在大二的时候,当时看了几本书,看了一些视频,主要是传智播客的。更多的,还是写代码,单独写Spring的,也有与Struts和Hibernate等框架整合的。很久以来...

jtn
2015/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

困扰当前数据中心管理的三大难题

导读 当企业发展到一定程度,或者之前的机房不能满足现在的数据中心使用时,企业会对数据中心进行迁移。那么在数据中心进行迁移的时候会遇到哪些风险呢?针对这些风险我们应该做出怎样的措施来...

问题终结者
15分钟前
0
0
设计模式:工厂方法模式(工厂模式)

工厂方法模式才是真正的工厂模式,前面讲到的静态工厂模式实际上不能说是一种真正意义上的设计模式,只是一种变成习惯。 工厂方法的类图: 这里面涉及到四个种类: 1、抽象产品: Product 2、...

京一
31分钟前
0
0
区块链和数据库,技术到底有何区别?

关于数据库和区块链,总会有很多的困惑。区块链其实是一种数据库,因为他是数字账本,并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是,区块链是数据库,数据库可不...

HiBlock
39分钟前
0
0
react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
46分钟前
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
54分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部