目录
一、认识SpringMVC框架
1.理解MVC模式
经典MVC模式中,M是指模型,V是视图,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
其中,View的定义比较清晰,就是用户界面。
模型(model) 用于存储数据的对象。
视图(view) 向控制器提交所需数据、显示模型中的数据。
控制器(controller) 负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出(商业)处理,将有关结果存储到模型中,并负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。
2.了解SpringMVC概念
SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架。
SpringMVC是一款优秀的MVC应用框架,目前主流的MVC框架之一 。
Spring3.0后全面超越struts2,成为最优秀的MVC框架。
SpringMVC通过一系列MVC注解,使得普通javabean成为处理请求控制器,无需关联任何接口,支持REST风格的URL请求 。
采用松耦合可插拔组件结构,比其他MVC框架更具备扩展灵活性 。
SpringVC与Spring框架其实是两个东西 。
二、熟悉SpringMVC执行流程
(1)用户发送请求至前端控制器DispatcherServlet
(2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。
(3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4)DispatcherServlet调用HandlerAdapter处理器适配器。
(5)HandlerAdapter经过适配调用具体的Handler处理器(Controller,也叫后端控制器)。Controller执行完成返回ModelAndView。
(6)HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。
(7)DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
(8)ViewReslover解析后返回具体View视图。
(9)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
(10)DispatcherServlet响应用户。
上图来源于此博客https://blog.csdn.net/gloal_cook/article/details/112759926
若想了解SpringMVC的详细执行流程、SpringMVC 组件解析@RequestMapping、组件扫描、转发重定向、改视图解析器、 SpringMVC 的三大组件也可点击链接转至相关博客。
三、搭建第一个使用SpringMVC的程序
1.使用XML搭建SpringMVC程序
步骤如下:
(1). 新建 Maven 项目。
(2). 配置 pom.xml 文件,添加 SpringMVC 相关依赖包。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.8</version>
</dependency>
</dependencies>
(3). 在项目的 web.xml 中配置 SpringMVC 的 DispatcherServlet。同时也需要指定 SpringMVC 的配置文件。
<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>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(4). 创建 SpringMVC 的配置文件,一般命名为 spring-mvc.xml,用于配置 SpringMVC 相关的组件,例如视图解析器。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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-3.0.xsd">
<!-- 配置自定扫描的包 -->
<context:component-scan base-package="com.example.controller"></context:component-scan>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
(5). 创建控制器类,一般使用 @Controller 注解来标记,该类中定义的方法对应着请求的 URL 地址。
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("hello···");
return "hello";
}
}
(6). 在webapps/WEB-INF/views/下创建hello.jsp视图页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
你好,SpringMVC!
</body>
</html>
(7). 运行项目,访问对应的 URL 地址,就可以看到对应的页面。
在配置时需要注意版本的兼容性,以及配置文件的路径和相应组件的命名等。
2.使用注解方式搭建SpringMVC程序
步骤如下:
(1).添加servlet依赖,并新建com.example.config包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
(2)在config包下创建配置SpringMVCConfig替换spring-mvc.xml
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@ComponentScan("com.example.controller")
public class SpringMVCConfig implements WebMvcConfigurer {
//加入试图解释器的代码代替spring-mvc.xml
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
(3)在config包下创建配置类ServletContainersInitConfig替换web.xml
package com.example.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMVCConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
(4)重新启动,并测试。
四、学习总结
通过对SpringMVC框架的学习,让我对MVC模式有了更深入的理解,并了解了SpringMVC的概念和核心功能。SpringMVC的执行流程包括用户发送请求、前端控制器确定处理器、处理器执行业务逻辑并返回模型对象、前端控制器选择视图并将模型对象传递给视图、视图生成用户界面并返回给用户。我通过两种方式(XML配置和注解方式)搭建了第一个使用SpringMVC的程序,熟悉了SpringMVC的基本使用。这些学习和实践让我对SpringMVC有了更全面的了解和掌握,为我在Web应用程序开发中使用SpringMVC打下了坚实的基础。