学习内容
一、回顾
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)