关于SpringMVC项目
因为平时工作中需要维护一些比较老的springmvc项目,所以简单介绍一下spingmvc项目结构和如何维护,以及部署。
一、springmvc项目简单介绍
1、什么是MVC模型
MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:
Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。
View(视图):用于展示模型中的数据的,一般为jsp或html文件。
Controller(控制器):是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。
2、SpringMVC
SpringMVC是一个基于MVC模式的轻量级Web框架,是Spring框架的一个模块,和Spring可以直接整合使用,我们使用的版本是Spring6,所以JDK需要17以上。SpringMVC代替了Servlet技术,它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。
关于mvc项目不做过多的介绍,着重讲解一下如何搭建以及mvc的项目结构。
二、SpringMVC项目入门
创建简易springmvc项目:
1、和创建springboot项目差不多,选择新建maven项目,新建的maven项目是没有webapp目录的,需要我们手动添加一下。
这时新建的项目结构:
创建webapp目录:
配置目录在src\main 目录下:
选择确定之后,即创建了web目录:
然后可以选择重命名改为 webapp 目录:
这样就创建成功了。然后可以手段创建一个index.jsp.
2、添加pom文件相关依赖以及配置:
上面这种方式创建的项目,pom文件中要先添加打包方式为 war 包:
<packaging>war</packaging>
然后添加相关的依赖以及插件:
完整的pom的文件如下所示:
<?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>com.mvc</groupId>
<artifactId>springmvc-01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version> <!-- 适用于 Servlet 4.0 规范,可以根据需要调整 -->
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- tomcat7插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8081</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、创建配置类:
首先创建 一个简单的controller :
@Controller
public class UserController {
@RequestMapping(value = "/aaa" , produces = {"text/html;charset=UTF-8;", "application/json;"})
@ResponseBody
public String aaa(){
// System.out.println("你好!");
return "{'info':'你好!'}";
}
}
创建配置类 SpringMvcConfig :
@Configuration
@ComponentScan("com.mvc.controller")
public class SpringMvcConfig {
}
创建初始化配置类 ServletInitConfg :
public class ServletInitConfg extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
上面的所需的类创建完成之后,就可以使用idea自带的tomcat进行启动了,启动流程如下:
点击上方,进行编辑:
命令的行选择输入:
然后点启动就可以了:
以上一个简易的springmvc项目就启动完成了。
三、springmvc项目执行流程
启动服务器初始化过程:
1、服务器启动,加载我们定义好的 ServletInitConfg 类,这个类的作用其实跟 web.xml 一样,比较更老一点的项目,会使用 web.xml ,后来就是使用了配置类的形式,使用配置类的形式更容易维护。
不管是配置类的形式 还是 web.xml 的格式,都是为了初始化web容器。配置的类方法如下所示:
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
2、执行 createServletApplicationContext 方法:会得到一个 WebApplicationContext 上下文对象,这个对象是我们springmvc体现的对象,有了这个对象之后,这个对象就加载到了web容器中,具体其实就是加载到了 servletContext 对象中。这个是web容器中最大的范围。
3、加载springMvcConfig ,执行上面的方法,初始化了一个 AnnotationConfigWebApplicationContext 对象,然后注册了一个 springMvcConfig.class 对象,这个其实就是加载具体的配置。
4、执行@ComponentScan 加载对应的bean:
@Configuration
@ComponentScan("com.mvc.controller")
public class SpringMvcConfig {
}
这个注解会去扫描对应的包,然后将包下面的bean加载 到上下文对象中:
5、加载 userController,每个@RequestMapping 的名称对应一个具体的方法,当执行路径中的请求的时候,就会拦截到对应的方法中,所以会将 路径 与 对应方法 进行一个注册。这个路径与方法的映射是放在一个统一的地方管理的。
6、执行getServletMappings方法,定义所有的请求都通过 springMvc :
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
执行了这个方法,就是让拦截所有进入tomcat的请求,全部由springmvc来处理。
到这里我们服务器的初始化过程就算完成了。
单次请求过程:
1、发送请求localhost/save
2、请求发出之后,被我们的web容器所拦截,因为服务器初始化的时候设置了,所有请求都通过springmvc 处理,
3、因为springmvc中 每一个路径 都注册了一个对应方法,所以就会解析 请求路径 /save ,
4、解析了这个路径之后,发现