Spring Web MVC 简单使用
1.1 简介
1.1.1 概述
Spring Web MVC 框架简称 Spring MVC,Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。实现了 Web 开发中的经典的 MVC(Model-View- Controller)模式。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 Spring MVC 框架或集成其他 MVC 开发框架, MVC 由以下 3 部分组成: ♞ 模型(Model):应用程序的核心功能,管理模块中用到的数据和值。 ♞ 视图(View):提供模型的展示,管理模型如何显示给用户,它是应用程序的外观。 ♞ 控制器(Controller):对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。 Spring Web MVC 是基于 Servlet APl 来构建的,自 Spring 框架诞生之日起,就包含在 Spring 中了。要使用 Spring Web MVC 框架的功能,需要添加 spring-webmvc 模块。
1.1.2 Spring MVC 组件
- DispatcherServlet 整个流程控制的核心,调用其他组件处理用户的请求,降低了组件之间的耦合性
- HandleMapping 根据用户请求找到 Handle
- HandleAdpater 执行 Handle
- ViewResolver 将结果处理成 View
- Handle 【自己写的controller层】 业务逻辑
- View 【JSP、HTML】 渲染 View
1.1.3 执行流程
♞ 浏览器发送请求到服务器,DispatcherServlet(前端核心控制器) 匹配所有请求 ♞ DispatcherServlet 将 url 发送给 HandleMapping(处理器映射器) ♞ HandleMapping 查找是否有符合该路径的方法,有则将方法全限定名返回给 DispatcherServlet,没有则报 404 ♞ DispatcherServlet 拿到 HandleMapping 返回的全限定名,将其交给 HandleAdapater(处理器适匹配器) ♞ HandleAdpater 拿到全限定名后执行方法 ♞ 方法返回 视图名称,HandleAdpater 将其返回给 DispatcherServlet ♞ DispatcherSerclet 拿到 视图名称 后,将其交给 ViewResolver(视图解析器) ♞ ViewResolver 拿到 视图名称 查找是否有匹配的资源 ♞ 有则将 视图 返回给 DispatcherServlet ♞ DispatcherServlet 拿到 视图 后,将其交给 View 渲染,填充数据后,DispatcherServlet 将 视图 响应给浏览器
1.2 基本使用
1.2.1 相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
1.2.2 spring 配置(spring-mvc.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.software.spring"/>
<!-- 开启 MVC 注解支持 -->
<mvc:annotation-driven/>
</beans>
1.2.3 配置前端核心控制器(web.xml)
<!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>
<!-- 配置前端核心控制器 -->
<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>
<!--
load-on-startup 元素标记容器是否应该在 web 应用程序启动的时候就加载这个 servlet,即实例化并调用 init() 方法
它的值必须是一个整数,表示 servlet 被加载的先后顺序。
如果该元素的值为负数或者没有设置,则容器会当 servlet 被请求时再加载
如果值为正整数或者 0 时,表示容器在应用启动时就加载并初始化这个 servlet
值越小,servlet 的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。
-->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1.2.4 @RequestMapping 指定请求路径
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/8/24
* @description 控制器
*/
@Controller
public class DemoController {
/*
* value:用于指定请求的 URL。它和 path 属性的作用是一样的
* method:用于指定请求的方式
* params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样
* headers:指定限制请求的请求头信息
*/
@RequestMapping(value = "/get", method = RequestMethod.GET)
public void get() {
System.out.println("请求到了~~~~");
}
}
1.2.5 项目目录
1.2.6 IDEA 启动
☞ 打包项目
☞ 配置 Tomcat
☞ 启动项目
启动项目之后,请求 Tomcat 中配置好的 URL + @RequestMapping 上配置好的请求路径就可以请求到对应的方法。
- OC学习2——C语言特性之函数
- OC学习1——基本数据类型
- QQ定位女友是否回家系列二之定位系统的打造
- htcap:一款实用的递归型Web漏洞扫描工具
- 使用Go和Let's Encrypt证书部署HTTPS
- md5算法
- 《JavaScript高级程序设计》学习笔记(3)——变量、作用域和内存问题
- King Phisher:一款专业的钓鱼活动工具包
- 是不是Bash编程老司机,看完这10条细节就知道了
- 以针对Yahoo! 的安全测试为例讲解如何高效的进行子域名收集与筛选
- 线程池
- hbase 部署
- Hadoop源码系列(一)FairScheduler申请和分配container的过程
- MOTS攻击之TCP攻击
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释