欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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