沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

  • 工具库篇

  • 开发技巧篇

  • 工具类系列

  • 随笔

    • HttpServletRequest知识小结
    • Spring MVC 项目构建流程
      • 1、软件版本
      • 2、本文目标
      • 3、Hello World 案例
        • Step1:创建一个 Maven 项目
        • Step2:项目中创建一个 Java Enterprise 模块
        • Step3:Maven 中添加 Spring MVC 相关依赖
        • Step4:web.xml 中配置 Spring MVC
        • Step5:添加 Spring MVC 配置文件
        • Step6:写一个 HelloController
        • Step7:将项目部署到 tomcat 中
        • Step8:验证效果
      • 4、Spring MVC 处理请的过程
        • 4.1 详细的过程
        • 4.2 简化过程
    • 虚拟机固定ip地址
    • 项目部署
    • 深入理解数组
    • IIS使用小记
    • From的两种类型解析
    • 开发疑惑
    • 开发小记
    • bug小记
  • 开发日常
  • 随笔
沉梦听雨
2023-07-08
目录

Spring MVC 项目构建流程

# Spring MVC 项目构建流程

# 1、软件版本

  • IDEA -- 2020.3.3
  • JDK -- 1.8
  • Maven -- 3.6.1
  • Spring 5.3.6
  • Apache Tomcat 9.0.62

# 2、本文目标

通过 Spring MVC 实现一个 Hello World,将项目发布到 Tomcat 中,然后在首页中发起一个请求,请求交给 Spring MVC 处理,由 Spring MVC 向客户端输出一个 Hello World,通过这个案例让大家熟悉下 Spring MVC 的使用步骤。

# 3、Hello World 案例

img

# Step1:创建一个 Maven 项目

使用 IDEA 创建父工程,打开 IDEA -> File -> New -> Project

img

注意:是创建常规 Maven 项目

img

按照下图输入对应的信息。

img

点击 Finish,项目创建成功,如下图所示。

img

按照下图中的说明,将红框的部分删除。(本步骤为可选操作)。

img

pom.xml 文件内容如下所示,不是的话,用下面的内容替换即可。

<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.javacode2018</groupId>
    <artifactId>springmvc-series</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

此时项目结构如下图所示。

img

如下图,File -> Settings 中指定项目 Maven 的版本。(以前以配置过的,这步可忽略)

img

# Step2:项目中创建一个 Java Enterprise 模块

选中项目 -> 点击鼠标右键 -> New -> Module,创建一个 maven 模块。

如下图,选择 Java Enterprise 类型创建 web 模块,注意图中红框的选项,不要选错了。

img

点击上图中的 Next,进入下面页面,输入模块的信息,然后点击 Next。

如下图,点击 Finish,完成模块的创建。

img

项目结构如下图所示。

img

# Step3:Maven 中添加 Spring MVC 相关依赖

在 chat01-helloworld/pom.xml 中,添加了 Spring MVC 的依赖配置信息。

img

添加后,完整的内容为:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.javacode2018</groupId>
    <artifactId>chat01-helloworld</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>chat01-helloworld</name>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.7.1</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.6</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
    </build>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

同时,我们会看到,Spring MVC 的其它一些依赖被自动添加进来了,如下图所示。

img

# Step4:web.xml 中配置 Spring MVC

这种方式创建的模块,它的 web.xml 版本符合要求,为 4.0 版本,无需升级。

为了保证 Spring 能找到控制器,需要做如下配置:

  • 配置 Spring MVC 前端控制器 DispatcherServlet;
  • 配置初始化时,加载 springmvc.xml 文件;
  • 配置应用启动时就实例化前端控制器(可选)。
  • 配置解析请求路径。

在 web.xml 中添加 Spring MVC 的配置,可以直接将下面代码直接替换到 web.xml 中,主要就是配置了 DispatcherServlet 这个 servlet,这个是 Spring MVC 的核心配置。

<?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">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>

        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# Step5:添加 Spring MVC 配置文件

  • 配置扫描 Controller 包下所下的所有 java 文件。
  • 配置视图解析器,设置前后缀。视图解析器会根据配置路径将逻辑视图解析出物理视图。
  • 配置处理器映射器和处理器适配器(此两项配置可选),当没有配置时,Spring 会使用默认的处理器映射器和处理器适配器来处理请求。在实际开发基本上不用配置。

chat01-helloworld->resource->鼠标右键->New->XXML Configuration File->Spring Config

img

输入文件名称:springmvc.xml 。

img

文件添加成功,如下图所示。

img

在其中添加 <context:component-scan> 标签,具体如下所示。

<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 https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.javacode2018.chat01helloworld"/>

</beans>
1
2
3
4
5
6
7
8

# Step6:写一个 HelloController

这个类中创建了一个 hello 方法,方法上面添加了一个 @RequestMapping 注解,是 Spring MVC 中的一个注解,value 属性用来指定一个 url 列表,Spring MVC 会将这些指定的 url 请求转发给当前方法处理。

我们希望访问 /hello.do 的时候,跳转到 /WEB-INF/view/hello.jsp 这个页面,这个页面中输出一段内容。

package com.javacode2018.springmvcseries.chat01;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {
    /**
     * @RequestMapping:用来表示url和方法的映射
     * value属性用来指定一个url列表,springmvc会将这些指定的url请求转发给当前方法处理
     * @return
     */
    @RequestMapping("/hello.do")
    public ModelAndView hello() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/WEB-INF/view/hello.jsp");
        //也可用下面一句代替上面两句
        //ModelAndView modelAndView = new ModelAndView("WEB-INF/view/hello.jsp");
        //稍后将这个信息显示在hello.jsp中,modelAndView.addObject相当于request.setAttribute(name,value)
        modelAndView.addObject("msg","这是第一个 Spring MVC 程序!");
        return modelAndView;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

/WEB-INF/view/中添加 hello.jsp 内容如下

img

修改后的 hello.jsp 的内容如下。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div style="text-align: center">
    <h1>Hello Spring MVC</h1>
    <h1>msg:${msg}</h1>
</div>
1
2
3
4
5

接着修改 index.jsp 的内容,添加一个超链接,当点击这个超链接的时候,请求会发给 Spring MVC,然后 Spring MVC 会将请求转发给 HelloController 的 hello 方法,然后通过这个方法最后将 hello.jsp 内容输出。

<a href="hello.do">hello Spring MVC</a>
1

# Step7:将项目部署到 tomcat 中

这里我们将项目部署到 tomcat9 中,过程如下:

img

img

img

如下图,启动 tomcat。

img

# Step8:验证效果

访问:http://localhost:8080/chat01/

img

点击页面中的连接,会跳转到 http://localhost:8080/chat01/hello.do,输出

img

# 4、Spring MVC 处理请的过程

# 4.1 详细的过程

  1. tomcat 启动的时候,会初始化 DispatcherServlet,DispatcherServlet 中会创建一个 Spring MVC 容器,其实就是我们熟悉的 Spring 容器(ApplicationContext),只不过这个容器的类型是(WebApplicationContext),此容器会加载 web.xml 中 contextConfigLocation 指定的 Spring MVC 配置文件

img

  1. 由于 springmvc.xml 中指定了扫描包的规则,而 HelloController 符合这个扫描规则,所以会被注册到 Spring MVC 容器中

img

  1. 当发起 *.do 请求的时候,请求会到达 DispatcherServlet 中央处理器,中央处理器会根据请求路径,去 Spring MVC 容器中找到能够处理这个请求的方法,具体由哪个方法来处理这个请求呢?

这里就是通过 @RequestMapping 来匹配的,这个注解可以将请求和方法进行映射,匹配的请求会被 @RequestMapping 标注的方法处理,所以在这个步骤中 springmvc 容器会发现 HelloController 这个 bean 的 hello 方法方法可以处理 /hello.do 请求

  1. DispatcherServlet 中通过反射来调用 helloController 这个 bean 的 hello 方法
  2. DispatcherServlet 接收到了 hello 方法的返回值
  3. DispatcherServlet 根据 hello 方法的返回值,做跳转操作,相当于
request.getRequestDispatcher("/WEB-INF/view/hello.jsp").forward(request,response);
1

# 4.2 简化过程

客户端发送请求 ---> 到达 tomcat ---> tomcat 发现是请求是 *.do 的请求 ---> tomcat 将请求转发给中央调度器 DispatcherServlet ---> 中央调度器根据 url 将转发给我们自定义的 controller ---> DispacherServlet 根据 controller 的返回结果做跳转操作 ---> 将结果输出到客户端

上次更新: 2024/9/25 11:16:13
HttpServletRequest知识小结
虚拟机固定ip地址

← HttpServletRequest知识小结 虚拟机固定ip地址→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式