一.SpringMVC引入


1、BS和CS架构

  • 在我们开发过程中存在这两种架构
  • 一种是C/S架构,也就是客户端/服务器
  • 一种是B/S架构,也就是浏览器/服务器架构
  • 我们在JavaEE开发过程中大部分是WEB应用,所以这些都属于B/S架构进行开发的
  • JavaEE制定了一套规范就是Servlet,流程也是进行B/S架构
  • 在B/S架构中,应用系统有三层架构:表现层、业务层、持久层
  • 三层架构在我们实际开发中使用的非常多。

三层架构解读

  • 表现层
  • 也就是我们常说的web层
  • 表现层它负责接收客户端请求,向客户端响应结果。通常客户端浏览器使用http协议请求web层,wen层需要接收http请求,完成http响应
  • 表现层包括展示层和控制层
  • 控制层负责接受请求
  • 展示层负责结果的展示
  • 表现层依赖业务层,接受到客户端请求一般会调用业务层进行业务处理,并将结果响应给客户端浏览器
  • 表现层的设计一般都使用MVC模型(MVC是表现层的设计模型,和其他层没有关系)
  • 业务层
  • 业务层就是我们常说的service层
  • 它负责业务逻辑处理,和我们开发项目的需求相关。
  • web层 依赖业务层,但是业务层不依赖web层
  • 业务层在业务处理时候可能会依赖持久层,如果要对数据持久化需要保证事务一致性,所以事务应该放到业务层来控制。
  • 持久层
  • 也就是我们常说的dao层
  • 持久层负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口
  • 业务层需要通过数据访问层将数据持久化到数据库中
  • 持久层就是和数据库进行交互,对数据库表的增删改查

总的来说,表现层是负责数据展示,业务层负责业务处理,数据层负责数据操作


MVC设计模式

  • MVC是模型(model)-视图(view)-控制层(controller)的缩写
  • MVC模型是一种用于设计编写web应用程序表现层的模式
  • Model(模型)
  • 模型包含业务模型和数据模型,数据模型用于封装数据,业务模型用于处理业务
  • View(视图)
  • 通常指的就是我们的jsp或者html,一般就是展示数据的
  • 通常试图是依据数据模型创建的
  • Controller(控制层)
  • 是应用程序中处理用户交互的部分,一般就是处理程序逻辑的

2、SpringMVC介绍

  • SpringMVC是一种基于MVC设计模型的请求驱动类型的轻量级WEB框架
  • SpringMVC属于SpringFrameWork的后续产品,也已经融合在Spring Web Flow里面
  • Spring框架提供了构建Web应用程序的全功能MVC模块
  • SpringMVC通过一套注解,让一个简单的Java类称为处理请求的控制器,而无须实现任何接口。同时还支持RESTful编程风格的请求

总的来说:SpringMVC是一种基于Java实现的MVC模型的轻量级Web框架


SpringMVC优点

  • 使用简单
  • 性能突出
  • 灵活性强

二、SpringMVC快速入门程序

本次快速入门程序使用IDEA来开发

对比使用SpringMVC文档

地址:Web on Servlet Stack

1、使用IDEA创建MAVEN的WEB工程

bs架构 aspnet 和 vue bs架构与mvc的关系_数据库

 

bs架构 aspnet 和 vue bs架构与mvc的关系_bs架构 aspnet 和 vue_02

 

bs架构 aspnet 和 vue bs架构与mvc的关系_spring_03

 2、导入servlet、jsp、junit、spring上下文、springweb、springwebmvc依赖

<dependencies>
    <!-- 单元测试依赖 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- servlet依赖 -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.3</version>
    </dependency>

    <!-- jsp依赖 -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
    </dependency>

    <!-- spring上下文依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

    <!-- spring的web依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

    <!-- spring的webmvc依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

  </dependencies>

3、完善工程目录

1、创建resource和java目录,并创建cn.guan.controller包,并且在controller包里面创建HelloController的类

bs架构 aspnet 和 vue bs架构与mvc的关系_bs架构 aspnet 和 vue_04

 

bs架构 aspnet 和 vue bs架构与mvc的关系_spring_05

 

bs架构 aspnet 和 vue bs架构与mvc的关系_java-ee_06

 

/**
 * 控制层
 */
@Controller // @COntroller 控制层组件,标志为控制层
public class HelloController {

    @RequestMapping("/hello") // 等下浏览器访问的路径
    public String hello() {

        return "success.jsp"; // 等下访问成功跳转的页面
    }
}

2、在resource目录下创建springmvc.xml的配置文件

bs架构 aspnet 和 vue bs架构与mvc的关系_bs架构 aspnet 和 vue_07

 2.1导入springmvc配置文件约束,在文档可以找到

Web on Servlet Stack

bs架构 aspnet 和 vue bs架构与mvc的关系_mvc_08

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启组件扫描 -->
    <context:component-scan base-package="cn.guan"/>


</beans>

 

3、在webapp下创建success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>成功页面</title>
</head>
<body>
<h2>访问成功</h2>
<hr>
</body>
</html>

4、配置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>This is First SpringMVC Project</display-name>
  <!-- 编码过滤器 -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 前端控制器配置 -->
  <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>

5、配置Tomcat,准备运行项目

bs架构 aspnet 和 vue bs架构与mvc的关系_java-ee_09

 

bs架构 aspnet 和 vue bs架构与mvc的关系_java-ee_10

 

bs架构 aspnet 和 vue bs架构与mvc的关系_mvc_11

 

bs架构 aspnet 和 vue bs架构与mvc的关系_spring_12

 

bs架构 aspnet 和 vue bs架构与mvc的关系_数据库_13

bs架构 aspnet 和 vue bs架构与mvc的关系_java-ee_14

 浏览器输入接口地址:http://localhost:8080/hello

 

bs架构 aspnet 和 vue bs架构与mvc的关系_bs架构 aspnet 和 vue_15

 快速入门成功,接下来我们对整个流程进行分析还有知识点进行解读


快速入门工作流程

  • 服务器启动
  • 1、加载web.xml中的DispatcherServlet前端控制器
  • 2、读取spring-mvc.xml中的配置,加载所有cn.guan中所有标记为bean组件的类
  • 3、读取bean组件上方标注@RequestMapping注解的内容
  • 处理请求
  • 1、DIspatcherServlet前端控制配置拦截所有请求
  • 2、使用@RequestMapping配置的请求路径与浏览器请求的路径的内容进行对比
  • 3、执行对应的方法
  • 4、根据方法的返回值在webapp目录中查找对应的页面并展示

bs架构 aspnet 和 vue bs架构与mvc的关系_数据库_16

 

SpringMVC六大组件说明

  • 在SpringMVC的各个组件中,前端控制器、处理器、试图成为SpingMVC的MVC组件
  • 在SpringMVC的各个组件中,处理映射器、处理适配器、视图解析器称为SpringMVC的三大组件
  • DispatcherServlet:前端控制器
  • 当用户请求到达前端控制器,它就相当于MVC模式中的C控制,DispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户的请求
  • DispathcerServlet的存在降低了组件之间的耦合性
  • Handler:处理器
  • Handler是继DispathcerServlet前端控制器的后端控制器
  • 在DispatcherServlet的控制下Handller对具体的用户请求进行处理
  • 由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler
  • View:视图
  • SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等,我们常用的视图jsp
  • HandlerMapping:处理映射器
  • HandlerMapping负责根据用户请求找到Handler处理器
  • SpringMVC提供了不同的映射器实现不同的映射方式
  • 例如:配置文件方式,实现接口方式、注解方式等
  • HandlAdapter:处理器适配器
  • 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对跟多类型的处理器进行执行
  • View Resolver:视图解析器
  • View Resp;ver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名就是具体的页面地址,在生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户