首页 > 其他分享 >SpringMVC运行方式

SpringMVC运行方式

时间:2024-03-30 16:58:24浏览次数:20  
标签:容器 方式 Web SpringMVC springframework org import save 运行

web三层架构 

mvc模式 

异步调用

 

 SpringMVC运行方式

异步调用

我们想要得到相应的界面,必须要将我们想要加载的东西放入Web容器中。

如何得到Web容器呢?

初始化Web容器。

如何初始化Web容器呢?

我们要启动服务器(我们常用的服务器有Tomcat),执行不同的方法(文章开头举了三种方式,我们用异步调用初始化),得到不同的初始化Web容器。而如果我们要通过SpringMVC创建容器,我们要执行ServletContainerInitConfig类。

项目架构  

 ServletContainersInitConfig.java

package com.it.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 {
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMVCConfig.class);
        return ctx;
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};//所有请求都归mvc处理
    }

    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

代码中创建了WebApplicationContext对象放入到Web容器中 

 

 代码中创建了WebApplicationContext对象放入到Web容器中,但是具体放在Web容器中什么位置呢?

由图可知, 创建的WebApplicationContext对象放在ServletContext

回到ServletContainersInitConfig.java

打开配置

 SpringMVCConfig.java

package com.it.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.it.controller")//扫描这个包 这个包下都是用来处理请求的,加载controller控制器bean
public class SpringMVCConfig {
}

@ComponentScan扫描com.it.controller这个包,我们根据项目结构可知com.it.controller这个包下有UserController.java。这个配置文件的作用是扫描UserController加载对应的bean。当你使用了@ComponentScan注解,并指定了要扫描的包或类路径时,Spring会在这些路径下查找所有被@Component注解(或其子注解,如@Controller@Service@Repository@Configuration等)标记的类,并将这些类自动装配到Spring的bean容器中。

 UserController.java

package com.it.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {
    @RequestMapping("/save")//用来处理请求
    @ResponseBody
    public String save(){

        System.out.println("user save.....");
        return "{'info:'springmvc'}";
    }
}

 找到@Controller加载对应的Bean到容器中

 在代码中@RequestMapping("/save")关联了对应save()方法.

 

回到我们的ServletContainersInitConfig.java配置文件 

拦截所有进入Tomcat的容器的请求,全部由SpringMVC来处理

到目前为止,成功启动服务器的初始化过程

总结:

  1. 服务器启动,执行ServletContainersInitConfig类,初始化Web容器
  2. 执行createServletApplicationContext方法,创建了WebApplicationContext对象。
  3. 加载SpringMVCConfig
  4. 执行@ComponentScan加载对应的Bean
  5. 加载UserController,每一个@RequestMapping对应一个具体方法
  6. 执行getServletMappings方法,定义所有的请求都通过SpringMVC

单次请求过程:

  1. 发送请求localhost/save
  2. web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
  3. 解析请求路径/save
  4. 由/save执行匹配对应的方法save()
  5. 执行save()
  6. 检测到有@ResponseBody直接将save()方法的返回值作为相应体返回请求方 

运行结果: 

 

标签:容器,方式,Web,SpringMVC,springframework,org,import,save,运行
From: https://blog.csdn.net/q77777_7/article/details/137171918

相关文章

  • Jupyter notebook不输出运行结果
    问题:在jupyter中运行代码,没有反应(既不显示结果,也没有报错)。*其他帖子还提供了重装jupyter、降级pyzmq等方法,这里建议先尝试这种方法......
  • 关于集群节点timeline不一致的处理方式
    关于集群节点timeline不一致的处理方式本文出处:https://www.modb.pro/db/400223在PostgreSQL/MogDB/openGauss数据库日常维护过程中,如果多次对数据库进行角色切换,可能会出现timeline不一致的情况,导致备库不能正常加入到数据库集群,现在以PG为例对这些可能发生的情况进行......
  • Spring Cloud中从0-1实现高效的API接口,快来简单有效的方式来构建API接口
    目录1.添加POM依赖2.构建目录结构3.构建文件4.实现API接口4.1.MyBatis4.1.1.控制层(Controller)4.1.2.服务接口层(ServiceInterface)4.1.3.服务层(ServiceImplementation)4.1.4.实体类(Entity)4.1.5.数据访问层(Mapper) 4.1.6.JUnit单元测试Controller层测......
  • CrossOver2024最新免费版虚拟机软件 Mac和Linux系统上运行Windows 应用/游戏 CrossOve
    CrossOver是一款由CodeWeavers公司开发的,运行在Mac和Linux操作系统下,能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统,就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine(Windows模拟器)的代码,通过提供一个兼容层,......
  • 直播软件搭建,通过多种方式实现垃圾回收优化
    直播软件搭建,通过多种方式实现垃圾回收优化垃圾回收优化我们还需要根据直播软件搭建的性能需求,调整垃圾回收器的参数,选择合适的垃圾回收策略和算法。在进行接口调优时,垃圾回收优化是内存管理的一个重要方面。合理配置垃圾回收策略以及降低垃圾回收的成本可以有效提高系统的......
  • uniapp弹窗方式
    文字弹窗uni.showToast({ title:'文字弹窗', icon:'none', duration:2000 })图标文字弹框uni.showToast({ title:'成功提示弹窗', icon:'success', duration:2000 })取消确认弹框uni.showModal......
  • Java 实现缓存的三种方式
    Java实现缓存的三种方式文章目录Java实现缓存的三种方式一、`HashMap`实现缓存`Step-1`:实现一个缓存管理类`Step-2`:将缓存管理类交给`Spring`进行管理`Step-3`:编写接口测试缓存`Step-4`:结果展示二、`guavalocalcache`实现`Step-1`:导入`guava`依赖`Step-2`:使用`......
  • 数据结构之————线性表ADT、以数组存储方式实现抽象类型的一个实例
    前言:基础填坑1、ADT在文章开始前,我们要弄明白什么是ADT(AbstractDataType)抽象数据类型1、ADT是用户定义的数据类型,它包含一组数据以及在这组数据上进行的操作。只定义操作的行为,没有具体的实现细节2、它存在的目的是使我们能够独立于程序的实现细节来理解数据结构的特......
  • driver-class-name: com.mysql.jdbc.Driver爆红解决方式
    目录问题解决方式一:手动添加mysql的jar包问题问题:在springboot项目工程中想要进行数据库配置,在application.yml中添加以下代码:#数据库配置spring:datasource:driver-class-name:com.mysql.cj.jdbc.Driverusername:root#你本地的数据库用户名password......
  • CentOS7 下 Docker方式部署 nextcloud步骤
    本示范站点在操作系统Centos7环境下;根目录设在:/app/dapp/caihcloud/nextcloud/html,根据实际情况自行调整;假设你已经安装启动好mysql80。现在开始,步骤如下:1、执行安装命令yuminstalldocker-ysystemctlstartdocker//启动dockersystemctlenabledocker//设置开机启动......