文章目录
Spring MVC框架
Spring MVC 简介
MVC 体系结构
三层架构
开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器;另一种是B/S架构,也就是浏览器/服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。
三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:
-
表现层
也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web层需要接收http请求,完成http响应。
表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
表现层的设计一般都使用MVC模型(MVC是表现层的设计模型,和其他层没有关系)。
-
业务层
也就是我们常说的service层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web层依赖业务层,不依赖表现层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性(也就是我们说的,事务应该放到业务层来控制)。
-
持久层
也就是我们常说的dao层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层就是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗地讲,持久层就是和数据库交互,对数据表进行增删改查的。
MVC设计模式
MVC全名是Model View Controller,是模型(model)- 视图(view)- 控制器(controller) 的缩写,是一种用于设计创建web应用程序表现层的模式。MVC中每个部分各司其职:
- Model:模型包含业务模型和数据模型;数据,模型用于封装数据,业务模型用于处理业务。
- View:通常指的就是我们的jsp或者html。作用一般就是展示数据的。通常视图是依据模型数据创建的。
- Controller:是应用程序中处理用户交互的不符。作用一般是处理程序逻辑的。
MVC设计模式提倡:每一层只编写自己的东西,不编写其他层的代码;分层是为了解耦,解耦是为了维护方便和分工协作。
Spring MVC是什么?
Spring MVC全称:Spring Web MVC,是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFramework的后续产品
Spring架构:
SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架,它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无需实现任何接口,同时它还支持RESTful编程风格的请求。
总之,SpringMVC和Struts2一样,都是为了解决表现层问题的web框架,它们都是基于MVC设计模式的,主要职责就是处理前端HTTP请求。SpringMVC本质上可以认为是对servelet的封装,简化了我们servelet的开发。
接收请求 ==> 返回响应,转跳页面
Spring Web MVC工作流程
需求:前端浏览器请求url: http://localhost:8080/test/handler01 ,前端页面显示后台服务器的时间
开发流程:
-
新建Maven web工程,导入依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <!-- 引入spring web mvc 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.5.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build>
-
在webapp/WEB-INF/web.xml配置DispatcherServlet前端控制器
<servlet> <servlet-name>springmvc</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>springmvc</servlet-name> <!-- 方式一:带后缀,如*.action 方式二:/ 不会拦截.jsp 方式三:/* 拦截所有,包括.jsp --> <url-pattern>/</url-pattern> </servlet-mapping>
-
开发处理具体业务逻辑的Handler
@Controller @RequestMapping("/test") public class TestController { /** * url: http://localhost:8080/test/handler01 * @return */ @RequestMapping("/handler01") public ModelAndView handler01(){ Date date = new Date(); // 封装了数据和页面信息 返回数据到前端页面 ModelAndView modelAndView = new ModelAndView(); // addObject 其实是向请求域中request.setAttribute("date",date); modelAndView.addObject(date); // 视图信息(封装跳转的页面信息),逻辑视图页面 modelAndView.setViewName("success"); return modelAndView; } }
-
前端/WEB-INF/jsp/success.jsp页面
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <title>Title</title> </head> <body> 跳转成功,当前系统时间为:${date} </body> </html>
-
配置springmvc.xml配置
<?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" xmlns:mvc="http://www.springframework.org/schema/mvc" 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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- 开启注解扫描 --> <context:component-scan base-package="org.example.controller"/> <!-- 配置springMVC视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 视图文件前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 视图文件后缀 --> <property name="suffix" value=".jsp"/> </bean> <!-- 自动注册最合适的处理器映射器,处理器设配器 --> <mvc:annotation-driven/> </beans>
启动程序,访问 http://localhost:8080/test/handler01
Spring Web MVC 工作流程
流程说明:
-
用户发送请求至前端控制器DispatcherServlet
-
DispatcherServlet收到请求调用HandlerMapping处理器映射器
-
处理器映射器根据请求Url找到具体的Handler(后端控制器),生成处理器对象及处理器拦截器(如果有则生成)一并返回DispatchServlet
-
DispatchServlet调用HandlerAdapter处理器适配器去调用Handler
-
处理器设配器执行Handler
-
Handler执行完成给处理器适配器返回ModelAndView
-
处理器适配器向前端控制器返回ModelAndView,ModelAndView 是SpringMVC框架的一个底层对象,包括Model和View
-
前端控制器请求视图解析器去进行视图解析,根据逻辑视图名来解析真正的视图
-
视图解析器向前端控制器返回View
-
前端控制器进行视图渲染,就是将模型数据(在ModelAndView对象中)填充到request域
-
前端控制器向用户响应结果