Spring MVC学习笔记 第一章 概述
程序员文章站
2022-07-15 13:25:05
...
Spring MVC学习笔记 第一章 概述
Spring MVC概述
Spring MVC是目前主流的实现MVC设计的框架,是Spring框架的一个分支产品,以Spring IoC容器为基础,并利用容器的特性来简化它的配置。
Spring MVC相当于Spring的一个子模块,可以很好的和Spring结合起来进行开发,是Java Web开发者必须要掌握的框架。
什么是MVC设计模式?
将应用程序分为Controller,Model,View三层,Controller接收客户端请求,调用模型层生成业务数据,传递给View。
Spring MVC就是对这套流程的封装,屏蔽了很多底层代码,开放出接口,让开发者可以更加轻松,便捷地完成基于MVC模式的Web开发。
Spring MVC的核心组件
- DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
- Handler:处理器,完成具体的业务逻辑,相当于Servlet或Action。
- HandlerMapping:DispatcherServlet接收到请求之后,通过HandlerMapping将不同的请求映射到不同的Handler。
- HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
- HandlerExecutionChain:处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)
- HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作,包括表单数据的验证,数据类型的转换,将表单数据封装到JavaBean等,这些操作都是由HandlerAdapter来完成,开发者只需要将注意力集中到业务逻辑的处理上,DispatcherServlet通过HandlerAdapter执行不同的Handler。
- ModelAndView:装载了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet。
- ViewResolver:视图解析器,DispatcherServlet通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。
Spring MVC的工作流程
- 客户端请求被DispatcherServlet接收。
- 根据HandlerMapping映射到Handler。
- 生成Handler和HandlerInterceptor。
- Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet。
- DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理。
- Handler返回一个ModelAndView给DispatcherServlet。
- DispatcherServlet将获取的ModelAndView对象传给ViewResolver视图解析器,将逻辑视图解析为物理视图View。
- ViewResolver返回一个View给DispatcherServlet。
- DispatcherServlet根据View进行视图渲染(将模型数据Model填充到视图View中)。
- DispatcherServlet贾昂渲染后的结果响应给客户端。
Spring MVC的特点
- 清晰地角色划分
- 灵活的配置功能
- 提供了大量的控制器接口和实现类
- 分离View层的实现
- 国际化支持
- 面向接口编程
Spring MVC流程非常复杂,实际开发中很简单,因为大部分组件不需要开发者创建,管理,只需要通过配置文件的方式完成配置即可。真正需要开发者处理的只有Handler,View。
如何使用?
①创建Maven工程,配置pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
②在web.xml中配置DispatcherServlet
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
③springmvc.xml中配置(新建xml文件)
<!--自动扫描-->
<context:component-scan base-package="com.fw"></context:component-scan>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
④创建Handler
package com.fw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloHandler {
@RequestMapping
public String index(){
System.out.println("执行了index。。。");
return "index";
}
}
通过以下URL可直接访问index.jsp页面:
http://localhost:8080/index