# SpringMVC > Java技术栈的Web应用是如何发展的? > 什么是MVC,什么是SpringMVC? > SpringMVC主要的请求流程是什么样的? > SpringMVC中还有哪些组件? > 如何编写一个简单的SpringMVC程序呢? ## 什么是MVC > 模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计规范。本质上也是一种解耦。 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。  * Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。 * View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。 * Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 **Spring MVC相关特性如下:** * 让我们能非常简单的设计出干净的Web 层和薄薄的Web 层; * 进行更简洁的Web 层的开发; * 天生与Spring 框架集成(如IoC 容器、AOP 等); * 提供强大的约定大于配置的契约式编程支持; * 能简单的进行Web 层的单元测试; * 支持灵活的URL 到页面控制器的映射; * 非常容易与其他视图技术集成,如 Velocity、FreeMarker 等等,因为模型数据不放在特定的 API 里,而是放在一个 * Model 里(Map 数据结构实现,因此很容易被其他框架使用); * 非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; * 提供一套强大的JSP 标签库,简化JSP 开发; * 支持灵活的本地化、主题等解析; * 更加简单的异常处理; * 对静态资源的支持; * 支持Restful 风格。 --- 核心架构的具体流程步骤:  核心架构的具体流程步骤如下: 1. 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制; 1. DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略; 1. DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器; 1. HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻辑视图名); 1. ModelAndView 的逻辑视图名——> ViewResolver,ViewResolver 将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术; 1. View——>渲染,View 会根据传进来的Model 模型数据进行渲染,此处的Model 实际是一个Map 数据结构,因此很容易支持其他视图技术; 1. 返回控制权给DispatcherServlet,由DispatcherServlet 返回响应给用户,到此一个流程结束。 **对上述流程的补充** 1. Filter(ServletFilter) > 进入Servlet前可以有preFilter, Servlet处理之后还可有postFilter  3. LocaleResolver > 在视图解析/渲染时,还需要考虑国际化(Local),显然这里需要有LocaleResolver.  5. ThemeResolver > 如何控制视图样式呢?SpringMVC中还设计了ThemeSource接口和ThemeResolver,包含一些静态资源的集合(样式及图片等),用来控制应用的视觉风格。  7. 对于文件的上传请求? > 对于常规请求上述流程是合理的,但是如果是文件的上传请求,那么就不太一样了;所以这里便出现了MultipartResolver。  ## Spring MVC案例 https://pdai.tech/md/spring/spring-x-framework-springmvc.html#spring-mvc%E6%A1%88%E4%BE%8B 补充: 1. IDEA中xml文件头报错 https://blog.csdn.net/haerxiong/article/details/55666872 1. tomcat配置 https://www.jianshu.com/p/b4b42a90b2e9
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.