学习内容

一、回顾

1.JSP Model2架构模型

  • 采用JSP + Servlet + JavaBean技术实现了页面显示、流程控制和业务逻辑的分离
  • Jsp负责生成动态网页,只用做显示页面;Servlet负责流程控制,用来处理各种请求的分派;JavaBeans负责业务逻辑,对数据库的操作
  • 流程控制等通用逻辑以硬编码的方式实现,每次开发新的Web应用程序均需重新编写流程控制、通用逻辑代码

2.Web MVC应用框架

  • Spring MVC框架就是目前最主流的Web MVC应用框架之一

二、Spring MVC介绍

1.Spring MVC概述

(1)Java EE开发的经典三层架构

包括表现层、业务层和持久层。

  • 表现层(Web层):负责接收客户端请求,并向客户端响应结果
  • 业务层(Service层):负责业务逻辑处理,和项目需求息息相关
  • 持久层(Dao层):负责和数据库交互,对数据库表进行增删改查

(2)Spring MVC框架

  • Spring MVC作用于三层架构中的表现层,用于接收客户端的请求并响应 ![image-20220416093655813](10初识Spring MVC框架/image-20220416093655813.png)
  • Spring MVC包含了控制器和视图
  • 控制器接收到客户端的请求后,对请求数据进行解析和封装,将请求转发给业务层
  • 业务层会对请求进行处理,最后将处理结果返回给表现层
  • 表现层接收到业务层的处理结果后,再由视图对处理结果进行渲染,渲染完成后响应给客户端

2.Spring MVC特点

  • Spring MVC是Spring框架的后续产品,可以方便地使用Spring框架所提供的其他功能
  • Spring MVC使用简单,很容易设计出干净简洁的Web层
  • Spring MVC支持各种请求资源的映射策略
  • Spring MVC具有非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API。
  • Spring MVC支持国际化,可以根据用户区域显示多国语言
  • Spring MVC支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术
  • Spring MVC灵活性强,易扩展

三、Spring MVC入门程序

1.实验环境要求

  • 要创建Web项目
  • 准备相关依赖包:
  • Spring MVC开发包:spring-webmvc.jar、spring-web.jar
  • Spring基础开发包:commons-logging-1.2.jar、spring-beans.jar、spring-context.jar、spring-core.jar、spring-expression.jar
  • spring-aop.jar
  • 配置Tomcat服务器

2.入门程序步骤

约定:Spring MVC的学习内容有三个单元,每个单元建一个项目,均放在springMVC目录下。

第一步:创建Web项目

  • 启动IDEA,单击菜单File -->New-->project...,弹出下图对象话并按图示设置
  • 选定项目位置为SpringMVC,项目名称chap10Introduce,具体如下图示。
  • 在src下创建包com.introduce,用以存放第10单元需要的源文件;在web\WEB-INF文件夹下创建jsp文件夹用以存放第10单元需要的jsp网页文件。具体项目结构如下图所示。
  • 设置web项目各类资源位置
  • web项目部署配置

单击ok前配置图示:

第二步:添加JAR包

  • 创建放依赖包的文件夹:在web\WEB-INF文件夹下创建lib文件夹
  • 复制依赖包:将Spring MVC开发spring-webmvc.jar、spring-web.jar,Spring基础开发包commons-logging-1.2.jar、spring-beans.jar、spring-context.jar、spring-core.jar、spring-expression.jar,及spring-aop.jar复制到lib文件夹中

![image-20220418114216904](10初识Spring MVC框架/image-20220418114216904.png)

  • 将依赖包文件夹添加为项目的库:在lib文件夹上单击鼠标右键,选择Add as Library...

第三步:配置Tomcat服务器

  • 单击菜单Run-->Edit configurations...,弹出对话框后按下图操作
  • 配置tomcat服务器
  • 添加部署项目

上图第二步后结果如下图。

  • 按Shift+F10启动项目 项目成功启动,并在浏览器中打开了默认网页,则说明之前配置没问题,可以开始开发web项目了!!
  • 为项目添加tomcat依赖包

第四步:配置前端控制器

  • Spring MVC通过前端控制器拦截客户端的请求并转发**(必有可少)**
  • 在web/WEB-INF/web.xml文件中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置Spring MVC的前端控制器-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化参数,读取Spring MVC配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!--应用加载时创建-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
         <!--/表示拦截所有请求(不包括.jsp),交由dispatcherServlet处理-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

第五步:配置处理器映射信息和视图解析器

  • 编写Spring MVC配置文件spring-mvc.xml(放src文件夹。注意:如果创建了资源文件夹,也可以放在资源文件夹中),其中配置视图解析器及相关映射信息
<?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: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">
    <!--配置bean扫描:注册控制器类-->
    <context:component-scan base-package="com.introduce"/>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--所有被拦载的访问地址前面加上/WEB-INF/,后面加上.jsp-->
        <property name="prefix" value="/WEB-INF/"/><!--设置前缀为/WEB-INF/-->
        <property name="suffix" value=".jsp"/><!--设置后缀为.jsp-->
    </bean>
</beans>

第六步:编写处理器

  • 创建处理(控制)器类FirstController.java (放com.introduce.controller包)
package com.introduce.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //设置当前类为处理器
public class FirstController {
    @RequestMapping("/hello") //设置当前方法的访问映射地址(在浏览器中输入的访问地址)
    public String toHello(){
        System.out.println("访问Hello.jsp");
        return "jsp/hello"; //设置具体的跳转页面
    }
}

第七步:创建视图(View)页面

  • 创建hello.jsp文件**(放web/WEB-INF/jsp文件夹)**
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>First SpringMVC</title>
    </head>
    <body>
        我的第一个Spring MVC文件。
    </body>
</html>

第八步:启动项目并测试应用

  • 按快捷键Shift+F10
  • 在浏览器中输入网址http://localhost:8080/chap10Introduce/hello,显示下图页面

![image-20220418115032048](10初识Spring MVC框架/image-20220418115032048.png)

四、Spring MVC工作原理

1.Spring MVC三大组件

  • 处理器映射器:HandlerMapping负责根据用户请求的URL找到Handler(处理器)。可以理解为一个Map<URL,Hanlder>,Spring MVC提供了不同的映射器来实现不同的映射方式。
  • 处理器适配器:根据处理器映射器找到的处理器 Handler 信息,去执行相关的Handler。不同的处理器映射器映射出来的Handler对象是不一样的,不同的映射由不同的适配器来负责解析。
  • 视图解析器:进行视图解析。首先将逻辑视图名解析成物理视图名,即具体的页面地址,再生成View视图对象返回

2.Spring MVC执行流程

![image-20220418114845353](10初识Spring MVC框架/image-20220418114845353.png)

执行流程说明

(1)用户通过浏览器向服务器发送请求,请求被Spring MVC的前端控制器DispatcherServlet拦截。

(2)DispatcherServlet拦截到请求后,调用HandlerMapping(处理器映射器)。

(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

(4)DispatcherServlet通过返回信息选择合适的HandlerAdapter(处理器适配器)。

(5) HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器。

(6)Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名。

(7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet。

(8)前端控制器请求视图解析器根据逻辑视图名解析真正的视图。

(9)ViewResolver解析后,会向DispatcherServlet中返回具体的View(视图)。

(10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。

(11)前端控制器向用户响应结果。

在上述执行过程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver对象的工作是在框架内部执行的,开发人员只需要配置DispatcherServlet,完成Controller中的业务处理并在视图中(View)中展示相应信息。

3.配置文件中的相关配置

  • 在老版本的Spring MVC中,配置文件内必须要配置处理器映射器、处理器适配器和视图解析器
  • 在Spring4.0以后
  • 可以不配置处理器映射器、处理器适配器和视图解析器,框架会加载内部默认的配置完成相应的工作
  • 也可以在配置文件中使用 mvc:annotation-driven/ 元素自动注册处理器映射器和处理器适配器
  • 一般会配置视图解析器,而不是使用默认配置

五、补充:Maven管理Web项目

1.概述

Maven是一个项目管理工具,有如下作用:

  • maven根据pom.xml文件中相应的配置,自动从远程仓库下载相应的jar包;
  • maven可以将配置的jar包依赖的其他jar包自动下载下来;
  • maven可以对项目打war包或者jar包。

2.配置文件pom.xml

  • pom.xml中配置依赖如下图所示

![image-20220426230335506](10初识Spring MVC框架/image-20220426230335506.png)

  • pom.xml中防止资源导出失败配置
<!--在build中配置resources, 来防止资源导出失败问题-->
<build>
    <resources>
        <!--防止src/main/resources目录下的.properties和.xml文件导出失败配置-->
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <!--防止src/main/java目录下的.properties和.xml文件导出失败配置-->
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

3.使用Maven管理Spring MVC项目

第一步:创建mavent项目

  • 新建项目时按下图选择"Maven"
  • 新建项目结构如下图

![image-20220426232152364](10初识Spring MVC框架/image-20220426232152364.png)

第二步:为项目添加web资源文件夹

  • 单击菜单File -> Project structure...,在弹出的对话中为当前项目添加web模块,具体如下图:

![image-20220426233640878](10初识Spring MVC框架/image-20220426233640878.png)

  • 上图单击OK后,按下面两张图分别设置web.xml文件位置和web资源的根目录
  • 设置完效果如下图,之后OK
  • 上图OK后,项目结构如下图

![image-20220426235310881](10初识Spring MVC框架/image-20220426235310881.png)

第三步:配置本地仓库和远程仓库

  • 网上下载maven后解压在D:\Program Files文件夹中,文件结构如下图
  • 打开上图中conf文件夹下的settings.xml文件,按下图分别设置本地仓库位置和远程仓库地址
<!--配置本地仓库-->
<localRepository>D:\Program Files\apache-maven-3.8.4\maven-repo</localRepository>
<!-- maven配置阿里云镜像仓库  -->
<mirror>
    <id>nexus-aliyun</id>  
    <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>  
    <name>Nexus aliyun</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>
  • 单击File ->setting...按下图进行maven设置

第四步:在pom.xml中配置Spring MVC开发的依赖

  • 单击下图箭头的地方,会开始在远程仓库中按配置下载配置的JAR包
  • 下载成功后如下图

第五步:后续进行项目部署、配置Tomcat服务器做法与前述介绍一样。

注:如果依赖包不知道应该怎样书写依赖,可以到maven仓库搜索查找其书写方法

第一步:输入网址https://mvnrepository.com/,按下图搜索想要的jar包

第二步:按下图选个版本进入下一步

第三步:按下图复制依赖配置

六、课后练习

在入门案例的基础上,完成下述任务:

  • 在web/WEB-INF/jsp文件夹在创建test.jsp
  • 完成相关配置,在浏览器访问网址http://localhost:8080/chap10Introduce/user/test时显示如下页面

![image-20220418121052268](10初识Spring MVC框架/image-20220418121052268.png)