1.Spring MVC的初步了解
这些概念性的东西,大家如果是初学的话可以先看看有个印象,等搭建完Spring MVC后,大家就会有更深刻的理解
1.1MVC是什么
- 模型-视图-控制器(MVC)是一种软件架构思想
- MVC主要通过分离模型、视图、控制器在应用程序中的角色来把业务逻辑从界面中解耦
- 模型:负责封装应用程序在视图层展示
- 视图层仅仅展示数据,不包含任何业务逻辑
- 控制器负责接收来自用户的请求,并调用后台服务(service或dao)来处理业务逻辑,处理后,后台业务层可能返回一些数据在视图层展示。控制器收集这些数据以及准备模型在视图层展示
- 可以解耦合
- 流程:
- 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收
- Controller调用相应的Model层处理请求,处理完毕后结果返回到Controller
- Controller再根据请求处理的结果找到对应的View视图,渲染数据后最终响应给浏览器
1.2 Spring MVC 是什么
- Spring MVC是一种基于Java实现Web MVC设计思想的请求驱动类型的轻量级Web框架,即使用了MVC架构模式思想把web层进行职责解耦
- 基于请求驱动指的是使用请求-响应模型
- 前端控制器是DispatcherServlet
- 应用控制器拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理
- 支持本地化/国际化,解析以及文件上传
- 提供了很灵活的数据验证,格式化和数据绑定机制
- 约束大于配置
1.3Spring MVC可以帮我们做什么
- 可以让我们很简单的设计出干净的Web层
- 进行更简洁的Web层开发
- 天生和Spring框架集成
- 提供强大的约定大一配置的契约式编程支持
- 能简单的进行web层的单元测试
- 支持灵活的URL到页面控制器的映射
- 很容易和其他视图技术集成,比如jsp,Velocity,FreeMarker等,因为模型数据不放在特定的API里面,而是放在一个Model里面(Map数据结构实现,因此很容易被其他框架使用)
- 很灵活的数据验证、格式化和数据绑定机制,能够用任何对象进行数据绑定,不必实现特定框架的API
- 支持灵活的本地化等解析
- 更加简单的异常处理
- 对静态资源的支持
- 支持Restful风格
1.4工作原理
-
首先用户发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;
-
前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调用HandlerMapping;
-
前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及Handler对象对应的拦截器);
-
DispatcherServlet 根据获得的HandlerExecutionChain,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法);
-
HandlerAdapter根据请求的Handler适配并执行对应的Handler;HandlerAdapter(提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据配置,Spring将做一些额外的工作:
-
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
-
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据格式化:
-
数据格式化。 如将字符串转换成格式化数字或格式化日期等
-
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中)
-
Handler执行完毕,返回一个ModelAndView(即模型和视图)给HandlerAdaptor
-
HandlerAdaptor适配器将执行结果ModelAndView返回给前端控制器。
-
前端控制器接收到ModelAndView后,请求对应的视图解析器。
-
视图解析器解析ModelAndView后返回对应View;
-
渲染视图并返回渲染后的视图给前端控制器。
-
最终前端控制器将渲染后的页面响应给用户或客户端
这里推荐一下有一篇文章流程写得挺详细的Springmvc执行流程介绍
这里涉及到http协议的uri和url,推荐大家看这篇文章HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
2.Spring MVC环境搭建
2.1开发环境
idea+maven+jdk1.8+tomcat
2.2新建maven webapp
在idea下面创建springmvc01工程
file->new->project
把jdk编译环境改成1.8
2.3pom.xml坐标添加
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springmvc01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>springmvc01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.19</version>
</dependency>
</dependencies>
</project>
2.4配置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">
<!-- 配置 DispatcherServlet 前端控制器 -->
<servlet>
<!-- servlet 名称 -->
<servlet-name>springMVC</servlet-name>
<!-- servlet处理类 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 设置 SpringMVC 配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 设置启动时候加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet映射路径 -->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!-- 拦截【/】请求,即:所有请求,除了jsp文件的请求 -->
<!-- *.do拦截所有do结尾的请求 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
如果想要启动Spring MVC环境,目前对应MVC框架的配置还没有进行,以上在web.xml中引用了springmvc.xml文件
2.5springmvc.xml配置
首先在项目中创建java和resources的目录
在resources目录中添加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
http://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="com.zyh.controller"></context:component-scan>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--给逻辑视图加上前缀和后缀 -->
<!--前缀-->
<property name="prefix" value="/jsp/"></property>
<!--后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--开启注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
然后在Java目录下创建对应的com.zyh.controller包
2.6页面控制器的编写
@Controller
public class HelloController {
@RequestMapping("/hello.do")
public ModelAndView hello(){
/**
* 请求地址映射 hello.do
*/
ModelAndView modelAndView = new ModelAndView();
//设置数据
modelAndView.addObject("hello", "Hello Spring MVC");
//设置视图名称
modelAndView.setViewName("hello");
//返回
return modelAndView;
}
}
2.7添加视图页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${hello}
</body>
</html>
2.8启动Tomcat服务器
端口默认是8080
2.9第一个程序流程总结
如果大家觉得麻烦的话,也可以把拦截路径改成/,这样以后就不用再写do了
转载:https://blog.csdn.net/qq_52797170/article/details/125712145