MVC模式和Spring MVC初识
概述
传统的Model1和Model2
在Model1的模式下,整个Web应用几乎全部是由JSP页面组成,接受和处理用户请求,并对请求处理后直接做出响应;JSP身兼View和Controller两个角色,将控制逻辑和表现逻辑糅合在一起。
缺点:
1.代码的复用性低。
2.增加了应用扩展和维护的难度。
Model2是基于MVC架构的设计模式,具体实现如下如:
MVC的思想是将一个应用分成三个基本部分,模型(Model)、视图(View)、控制器(Controller),这三个部分以最少的耦合协同工作,从而提高应用程序的可扩展性和可维护性。
1.模型(Model):JavaBean
2.视图(View):JSP页面
3.控制器(Controller):Servlet
MVC模式使得Model2具有组件化特点,更能适用于大规模应用的开发(但增加了开发的复杂度)。
MVC优势
MVC并不是Java语言和Web应用特有的设计思想,它是所有面向对象程序设计语言都应该遵守的规范。
在经典的MVC模式中,事件由控制器处理,控制器根据事件的类型改变模型或视图,反之亦然。
MVC的特点:
1.多个视图可以对应一个模型。按MVC的设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量。一旦模型发生改变,也易于维护。
2.模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术。
3.应用被分为三层,降低了各层之间的耦合,提供了应用的可扩展性。
4.控制层的概念也很有效,由于把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说包含了用户请求的权限的概念。
5.MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,这有利于通过工程化和工具化的方法产生管理程序代码。
注:经典MVC思想与Web应用的MVC思想存在一定差别,主要原因是Web应用是一种请求/响应模式。如果用户不对应用发出请求,视图无法主动更新自己。
Spring MVC
Spring框架提供了构建Web应用程序的全功能MVC模块:Spring MVC。
Spring MVC提供了一个DispatcherServlet作为前端控制器来分发请求,同时提供灵活的配置处理程序映射、视图解析、语言环境和主题解析,并支持文件上传。Spring MVC包含多种视图技术,分离了控制器、模型对象、分派器和处理程序对象的角色,使他们更容易进行定制。
Spring MVC特点:
1.具有强大的灵活性、非侵入性、可配置性。
2.提供了前端控制器DispatcherServlet,无需额外开发控制器对象。
3.分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器等,每一个功能实现由一个专门的对象负责完成。
4.可以自动绑定用户输入,并正确转换数据类型。
5.使用一个名称/值得Map对象实现更加灵活的模型数据传输。
6.内置常见的校验器,可以校验用户输入,如果校验不通过,则重定向回输入表单。输入校验可选,支持编程方式和声明方式。
7.支持国际化,支持根据用户区域显示多国语言,并且国际化的配置非常简单。
8.支持多种视图技术。
9.提供简单而强大的JSP标签库,支持数据绑定功能。
Spring MVC的使用
Spring MVC的DispatcherServlet是一个Servlet,继承自HTTPServlet,所以使用时需要配置在Web应用的web.xml文件中:
1 <servlet>
2 <!-- Servlet的名称 -->
3 <servlet-name>springmvc</servlet-name>
4 <!-- Servlet对应的Java类 -->
5 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
6 <!-- 当前Servlet的参数 -->
7 <init-param>
8 <!-- Servlet参数的名称 -->
9 <param-name>contextConfigLocation</param-name>
10 <!-- Servlet参数的值:Spring MVC的配置文件路径 -->
11 <param-value>classpath:springmvc-config.xml</param-value>
12 </init-param>
13 <!-- Web应用启动时立即加载Servlet -->
14 <load-on-startup>1</load-on-startup>
15 </servlet>
16 <!-- Servlet的映射声明 -->
17 <servlet-mapping>
18 <!-- 请求对应的Servlet的名称 -->
19 <servlet-name>springmvc</servlet-name>
20 <!-- 监听当前域的所有请求 -->
21 <url-pattern>/</url-pattern>
22 </servlet-mapping>
配置文件中各条配置含义见注释内容,整个文件内容的含义:配置了一个DispatcherServlet,该DispatcherServlet在Web应用启动时立即加载,DispatcherServlet在加载时需要一个Spring MVC的配置文件,默认配置下会到应用程序目录的WEB-INF目录下查找[servlet-name]-servlet.xml文件,即在上面配置中就是查找/WEB-INF/springmvc-servlet.xml。
上面配置是把配置文件命名为springmvc-config.xml,并使用参数元素init-param进行了配置,表示DispatcherServlet会查找应用程序的classpath:springmvc-config.xml文件作为配置文件,进行解析并根据配置文件内容创建一个WebApplicationContext容器对象(上下文环境)。
WebApplicationContext继承自ApplicationContext容器,它的初始化方式和ApplicationContext不同,因为WebApplicationContext需要ServletContext实例,必须拥有Web容器的前提下才能完成启动Spring Web应用上下文的工作。
MVC模式、Spring MVC框架及DispatcherServlet先记录到这里,后面继续Spring MVC的使用记录。
MVC模式和Spring MVC初识的更多相关文章
- Spring MVC 学习笔记 spring mvc Schema-based configuration
Spring mvc 目前支持5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller, mvc:resources和m ...
- java之spring mvc之初始spring mvc
1. mvc : mvc框架是处理 http请求和响应的框架 2. mvc 做的事情有哪些: 将 url 映射到一个java的处理方法上 将表单数据提交到 java 类中 将后台 java 类处理的结 ...
- Spring MVC(十六)--Spring MVC国际化实例
上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式.我的场景是这样的: 访问一个页面时,这个页面有个表格,对表头中的列名实现国际化. 第 ...
- Spring MVC mapping[From Spring MVC Beginner's Guide]
In a Spring MVC application, the URL can logically be divided into five parts (see the following fig ...
- Struts2如何实现MVC,与Spring MVC有什么不同?
Struts2采用filter充当前端控制器处理请求,filter会根据Struts.xml的配置,将请求分发给不同的业务控制器Action,再由Action处理具体的业务逻辑.Action处理完业务 ...
- 玩转spring mvc(四)---在spring MVC中整合JPA
关于在Spring MVC中整合JPA是在我的上一篇关于spring mvc基本配置基础上进行的,所以大家先参考一下我的上一篇文章:http://blog.csdn.net/u012116457/ar ...
- Spring MVC 零配置 / Spring MVC JavaConfig
1. Spring MVC的核心就是DispatcherServlet类,Spring MVC处理请求的流程如下图所示: 2. Spring MVC中典型的上下文层次 当我们初始化一个Dispatch ...
- 【spring mvc】后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface
后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate ...
- 1.2(Spring MVC学习笔记) Spring MVC核心类及注解
一.DispatcherServlet DispatcherServlet在程序中充当着前端控制器的作用,使用时只需在web.xml下配置即可. 配置格式如下: <?xml version=&q ...
随机推荐
- php中文乱码原因和维修方法
一.首先是PHP网页的编码 1.如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312”),静态页面添加,所有文 ...
- Java学习笔记之面向对象、static关键字
一周Java学习总结 今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字. 面向对象 现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的 ...
- 请求时发送OPTIONS请求
最近在用uni-app开发项目时,发现一个之前没注意到的点,当我发送POST请求的时候,在NetWork可以看到在发送正式的POST请求时,会先发送一个OPTIONS请求,OPTIONS请求后才会发送 ...
- ASP.NET Core 2.2 WebApi 系列【七】泛型仓储模式和工作单元
在之前的泛型仓储模式实现中,每个增删改都调用了SaveChanges方法,导致每次更新都提交了事务. 在实际开发过程中,我们经常遇到同时操作多张表数据,那么按照之前的写法,对数据库提交了多次操作,开启 ...
- Python中编写类的各种技巧和方法
简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...
- Python 你见过三行代码的爬虫吗
------------恢复内容开始------------ 每次讲爬虫的时候都会从“发送请求” 开始讲,讲到解析页面的时候可能大部分读者都会卡住,因为这部分确实需要一点XPATH或者CSS选择器的前 ...
- 平时代码中用不到设计模式?Are you kidding me?
引子 平时我是个反应非常慢的人.有多慢呢?大概是两年前有次团队内部开会时,我听到同学说平时代码中用不到设计模式,我当时没有回答.两年后我终于反应过来了:“Are you kidding me?我每天都 ...
- kali安装vmtool后依旧无法拖拽文件,复制粘贴,解决办法
本文链接:https://blog.csdn.net/Key_book/article/details/80310235命令行下 执行 apt-get install open-vm-tools-de ...
- PHP生成唯一ID
前言 PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据.即使使用了第二个参数,也会重复,最好的方 ...
- Docker中进入容器命令行及后台运行
Docker中我们一般会有两种执行命令的方式,一种是直接进入容器的命令行,在终端执行并查看结果,一种是在后台执行,并不会在终端查看结果. 1.进入容器命令行 su root docker run -i ...