一、SpringMVC的基本概念
(一)关于三层架构和MVC
1、三层架构
表现层:
1 | 表现层也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层, web 需要接收 http 请求,完成 http 响应。表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系) |
业务层:
1 | 业务层也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。 web 层依赖业务层,但是业务层不依赖 web 层。业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制) |
持久层:
1 | 持久层也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的 |
2、MVC模型
1 | MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。 MVC 中每个部分各司其职: |
(二)SpringMVC概述
1、SpringMVC是什么?
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架, 属于 Spring
FrameWork 的后续产品。
2、SpringMVC在三层架构中的位置
3、SpringMVC的优势
1 | 1、清晰的角色划分: |
4、SpringMVC和Struts2 的优缺点分析
1 | 共同点: |
二、SpringMVC的入门案例
(一)需求
在页面中有一个超链接,期望在点击超链接之后跳转到另外一个页面,并给出反馈信息。
(二)创建项目
打开IDEA,利用Maven创建一个web项目(步骤非常简单,省略)
(三)添加jar包依赖
在pom文件中添加以下依赖:
1 | <properties> |
(四)配置核心控制器
打开 webapp/WEB-INF/web.xml文件,在该文件中配置一个核心控制器(其实就是一个Servlet)。
1 | <web-app> |
(五)创建SpringMVC的配置文件
在resources目录下创建一个名称为 springmvc.xml 的配置文件(文件名随意取)。并在文件中编写需要扫描的包后再配置一个视图解析器,如下:
1 |
|
(六)编写控制器
创建一个用来充当控制器的类,然后在该类上使用注解进行配置,如下:
1 | /** |
(七)测试
在 webapp/WEB-INF/pages 下编写一个名为success的jsp文件,如下:
success.jsp:
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> |
将index.jsp修改如下:
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
将项目部署好后,在浏览器中输入<http://localhost:8080/springMVC_day01_01_start/>
测试即可:
点击超链接之后:
三、入门案例的执行过程及原理分析
(一)大致流程
(二)详细流程
四、入门案例中涉及的组件
(一)DispatcherServlet:前端控制器
1 | 用户请求到达前端控制器,它就相当于 mvc 模式中的 c, dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求, dispatcherServlet 的存在降低了组件之间的耦合性。 |
(二)HandlerMapping:处理器映射器
1 | HandlerMapping 负责根据用户请求找到 Handler 即处理器, SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等 |
(三)Handler:处理器
1 | 它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由Handler 对具体的用户请求进行处理 |
(四)HandlAdapter:处理器适配器
1 | 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行 |
(五)View Resolver:视图解析器
1 | View Resolver 负责将处理结果生成 View 视图, View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户 |
(六)View:视图
1 | SpringMVC 框架提供了很多的 View 视图类型的支持,包括: jstlView、 freemarkerView、 pdfView等。我们最常用的视图就是 jsp。 |
(七)<mvc:annotation-driven>
说明
1 | 在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。 |
1 | <!-- 上面的标签相当于 如下配置--> |
1 | 注意: |
五、RequestMapping注解
(一)使用说明
1 | 源码: |
1 | 出现位置: |
(二)使用示例
1、出现位置的示例
控制器代码:
1 | /** |
jsp中的代码:
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> |
注:
当我们使用此种方式配置时,在 jsp 中第二种写法时,不要在访问 URL 前面加/,否则无法找到资源。
2、method 属性的示例
控制器代码:
1 | /** |
jsp 代码:
1 | <!-- 请求方式的示例 --> |
注:
当使用 get 请求时,提示错误信息是 405,信息是方法不支持 get 方式请求.
3、params 属性的示例
控制器代码:
1 | /** |
jsp中的代码:
1 | <!-- 请求参数的示例 --> |
注:
当我们点击第一个超链接时,可以访问成功。
当我们点击第二个超链接时,无法访问。如下图:
Java新手,若有错误,欢迎指正!