一.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文档
1、使用IDEA创建MAVEN的WEB工程
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的类
/**
* 控制层
*/
@Controller // @COntroller 控制层组件,标志为控制层
public class HelloController {
@RequestMapping("/hello") // 等下浏览器访问的路径
public String hello() {
return "success.jsp"; // 等下访问成功跳转的页面
}
}
2、在resource目录下创建springmvc.xml的配置文件
2.1导入springmvc配置文件约束,在文档可以找到
<?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,准备运行项目
浏览器输入接口地址:http://localhost:8080/hello
快速入门成功,接下来我们对整个流程进行分析还有知识点进行解读
快速入门工作流程
- 服务器启动
- 1、加载web.xml中的DispatcherServlet前端控制器
- 2、读取spring-mvc.xml中的配置,加载所有cn.guan中所有标记为bean组件的类
- 3、读取bean组件上方标注@RequestMapping注解的内容
- 处理请求
- 1、DIspatcherServlet前端控制配置拦截所有请求
- 2、使用@RequestMapping配置的请求路径与浏览器请求的路径的内容进行对比
- 3、执行对应的方法
- 4、根据方法的返回值在webapp目录中查找对应的页面并展示
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进行渲染将处理结果通过页面展示给用户