初识spring-mvc框架及快速入门案例
spring-mvc概述
spring-mvc是基于java的实现mvc框架的架构的轻量级web框架,提高开发人员在开发web项目的效率。
经过不断发展,现如今已经成为最优秀的web框架。可以与spring框架无缝连接,并且接近于0配置,所有操作皆可通过注解实现。易于上手,易于使用。拥有独特的参数绑定和数据响应方式,可以自己制定拦截器,异常处理,类型转换器,并集成了文件上传的常用功能。极大的简便了开发过程。
spring组件分析
spring-mvc有6大组件,分别是前端控制器,处理器映射器,处理器适配器,处理器,视图解析器,视图,下面对它们进行简单介绍。
组件名称 | 详细介绍 |
---|---|
DispatcherServlet(前端控制器) | 是整个springmvc的核心控制器,由它控制整个运行流程,并降低了程序之间的耦合性 |
HandlerMapping(处理器映射器) | 根据用户请求找到对应的处理器, |
HandlerAdapter(处理器适配器) | 通过处理器适配器对处理器进行执行,通过扩展适配器可以达到对其他类型进行处理 |
Handler(处理器) | 对用户请求进行业务处理,开发中,也是主要开发的部分 |
ViewResolver(视图解析器) | 用于将处理后的结果转换为视图 |
View(视图) | 通过渲染视图展示给用户,也是前端工作者的主要开发部分 |
spring-mvc执行流程
通过上面6大组件,可以实现浏览器接收用户请求,处理器处理请求,返回数据,页面渲染展示给用户。
具体详细步骤由下图展示:
- 用户发送请求至前端控制器DispatcherServlet。
- DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter处理器适配器。
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫控制器)。
- Controller执行完成返回ModelAndView。
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
- ViewReslover解析后返回具体View。
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户。
spring-mvc注解介绍
名称 | 详细介绍 |
---|---|
@Controller | 严格来说这个属于spring框架中的注解,用来将此类交于spring容器管理,在web项目中主要为了标注Controller层,处理前端控制器的请求 |
@RequestBody | 将请求体中的参数转为json字符串形式接收 |
@RestController | 是Restfull风格的开发规范注解,拥有上面两个注解的功能 |
@RequestMapping | 指定用户的请求路径,一个请求路径对应一个处理方法,可以写在类上和方法上 |
@RequestParam | 当请求的参数名称与Controller的业务方法参数名称不一致时可以通过此注解绑定,也可以指定默认值和参数是否是必须传递 |
@PathVariable | Restfull风格下用于接收url地址栏参数占位符中的内容 |
@ResponseBody | 将响应的数据转为字符串返回 |
快速入门
首先创建一个maven WEB工程,导入相关依赖
pom.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>javaee</groupId>
<artifactId>day05_springmvc03</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!--导入springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
</project>
因为maven会自动导入webmvc的相关依赖,所以其他依赖不用手动导入
如图所示:
spring-mvc配置文件
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解扫描-->
<context:component-scan base-package="com.dyh"/>
</beans>
在web.xml中配置前端控制器,保证所有请求都经过前端控制器。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<!--配置前端控制器-->
<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:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--所有请求都转到前端控制器-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
创建一个Controller,也就是前面说的用于处理用户请求的处理器
package com.dyh.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("/test")// 指定一个请求路径
public void test(){
System.out.println("hello,world!");
}
}
加上Controller注解,交给spring容器管理,随后在方法上指定一个请求地址,用于用户访问。
启动服务器,访问http://localhost:8080/test,打开控制台,发现下面确实将hello,world!打印在控制台上。