首页 > 其他分享 >SpringMVC流程

SpringMVC流程

时间:2024-08-15 11:09:27浏览次数:6  
标签:web SpringMVC spring 流程 springframework handler import org

SpringMVC流程

 

img

主要组件:

  • DispatcherServlet:SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它处理和分发。

  • HandlerMapping:SpringMVC提供,我们需要进行IoC配置,使其加入到IoC容器。它内部缓存handler(controller方法),和handler访问路径数据,被DispatcherServlet调用,用于查找路径对应的handler。

  • HandlerAdapter:SpringMVC提供,我们需要进行IoC配置,使其加入到IoC容器。它可以处理请求参数和处理响应数据,以及调用handler。每次DispatcherServlet都是通过调用HandlerAdapter来间接调用 handler,它是 DispatcherServlet和 handler之间的适配器。

  • Handler:又称为处理器,它是controller内部方法的简称,由我们自己定义,用来接收参数,向后调用业务,最终返回响应结果。

  • ViewResolver:SpringMVC提供,我们需要进行IoC配置,使其加入到IoC容器。视图解析器主要作用是简化模板视图页面查找,如果handler只返回json数据,不返回页面,那么就不需要视图解析器。

 

1.基本流程

  1. 导入依赖

    spring-context、servlet(jakarta.jakartaee-web-api)、spring-webmvc

    <properties>
        <spring.version>6.0.6</spring.version>
        <servlet.api>9.1.0</servlet.api>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    ​
    <dependencies>
        <!-- springioc相关依赖  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    ​
        <!-- web相关依赖  -->
        <!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 -->
        <!--
            在 Spring Web MVC 6 中,Servlet API 迁移到了 Jakarta EE API,因此在配置 DispatcherServlet 时需要使用
             Jakarta EE 提供的相应类库和命名空间。错误信息 “‘org.springframework.web.servlet.DispatcherServlet’
             is not assignable to ‘javax.servlet.Servlet,jakarta.servlet.Servlet’” 表明你使用了旧版本的
             Servlet API,没有更新到 Jakarta EE 规范。
        -->
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-web-api</artifactId>
            <version>${servlet.api}</version>
            <scope>provided</scope>
        </dependency>
    ​
        <!-- springwebmvc相关依赖  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
    ​
    </dependencies>
  2. 创建Controller类,在其中定义handler,handler需要配置到 HandlerMapping中

    @RequestMapping 注解将handler注册到 HandlerMapping中,值就是访问该handler的地址

    @ResponseBody 注解表示直接返回字符串,不去找视图解析器

    package com.ztone.controller;
    ​
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    ​
    @Controller
    public class HelloController {
    ​
        @RequestMapping("spring/hello")
        @ResponseBody
        public String helloHandler(){
            return "hello springmvc";
        }
    }
  3. 准备spring配置类,将handler所在的Controller、HandlerMapping、HandlerAdapter配置到ioc容器

    package com.ztone.config;
    ​
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
    import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
    ​
    @Configuration
    @ComponentScan("com.ztone.controller")
    public class MvcConfig {
    ​
        //配置 HandlerMapping 和  HandlerAdapter
        @Bean
        public RequestMappingHandlerMapping handlerMapping(){
            return new RequestMappingHandlerMapping();
        }
        
        @Bean
        public RequestMappingHandlerAdapter handlerAdapter(){
            return new RequestMappingHandlerAdapter();
        }
    }

    准备好配置类后,还需要一个ioc容器。通过springmvc 初始化类创建ioc容器

  4. 创建

    该类会加载spring的配置类创建ioc容器,会指定DispatcherServlet的访问地址,他相当于替代了web.xml

    该类需要继承 AbstractAnnotationConfigDispatcherServletInitializer,重写如下方法:

    • getServletConfigClasses

      设置项目对应的配置类

    • getServletMappings

      配置springmvc内部自带的servlet的访问地址,否则需要自己在web.xml 中用servlet标签声明DispaterchServlet,并用servlet-mapping 配置路径

    package com.ztone.config;
    ​
    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    ​
    public class SpringMvcInit extends AbstractAnnotationConfigDispatcherServletInitializer {
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[0];
        }
    ​
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{MvcConfig.class};
        }
    ​
        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    }
  5. 部署到tomcat,注意tomcat的版本必须是 10+

 

2. springmvc初始化类原理

在上面的springmvc初始化类中可以创建ioc容器,以及配置DispatcherServlet

它能够在服务器一启动就执行这些操作的原因是:继承了AbstractAnnotationConfigDispatcherServletInitializer类

  • AbstractAnnotationConfigDispatcherServletInitializer继承自

    • AbstractDispatcherServletInitializer 继承自

      • AbstractContextLoaderInitializer继承自

        • WebApplicationInitializer

          这个接口就是 服务器启动时会执行 onStartup 方法

 

 

AbstractDispatcherServletInitializer 也实现了onStartup方法,并且在里面调用了 registerDispatcherServlet()

image-20240815102719698

这个方法调用了 创建 ioc 容器 和 创建DispatcherServlet 的方法

image-20240815102848979

在 createServletApplicationContext 方法中 创建了 ioc容器,并且调用了 getServletConfigClasses,这个方法就是被我们自己创建的初始化类重写了

除了创建ioc容器以及创建DispatcherServlet 两个方法之外,还有一个方法是 getRootConfigClasses

这个方法就是创建 service和 dao层的ioc容器方法

标签:web,SpringMVC,spring,流程,springframework,handler,import,org
From: https://www.cnblogs.com/wztblogs/p/18360463

相关文章

  • 忍龙2 不升级流程
    最近电脑上用模拟器复习了一下忍龙2原版.之前打过忍龙2的不升级武器,不升级血的流程.想过禁忍术,但是有几个地方禁了太难打,就没禁.难点:很多小怪都可以来回跑图,让地图自己检测小怪距离忍龙太远,自动删除小怪.第一关关底,飞燕杀死小怪之后,跑到bos边上,落地吸魂超杀之后3......
  • 简化文本处理流程,通用文字识别助力提升信息采集效率
    随着信息技术的发展、移动设备使用的普及和全球化的商业需求,非结构化数据转换为结构化数据的需求日益增长,数字化成为信息存储和管理的主流趋势。在此背景下,OCR技术应运而生,该技术可以将图像中文本信息转化为计算机等设备可以使用的字符信息,成为现代信息处理的关键技术。OCR技术丰......
  • GlobalMapper软件安装流程
    目录一、环境准备二、安装步骤三、软件激活一、环境准备系统:win7操作系统安装包下载:链接:https://pan.baidu.com/s/1Vb4VVRFBRYawt3MT-5gYOw           提取码:sxdj二、安装步骤1、解压,右键global-mapper-23_1-x64.exe文件,管理员运行,并下一步......
  • 从什么方面了解流程表单设计器开发的优势?
    众所周知,实现高效办公可以借助低代码技术平台的力量。因为这是目前广泛用于通信业、医疗、高校、制造业等很多行业领域中的理想软件平台。凭借诸多优势特点,在推动企业做好数据管理的过程中事半功倍,作用显著。本文将从以下几个方面为大家介绍低代码技术平台、流程表单设计器开发的......
  • 信息抽取(UIE)技术:让保险理赔信息处理流程便捷高效
    一、引言在当今快速发展的保险行业中,风险评估与定价是核心环节,它们直接关系到保险公司的盈利能力和市场竞争力。随着人工智能技术的不断进步,尤其是深度学习在图像识别和自然语言处理领域的突破,保险案件信息的自动化处理已成为可能。在理赔过程中,用户上传的理赔资料,如医疗记录、事......
  • 大语言模型训练部署流程及步骤
    01.确定需求大小在构建大语言模型的前期准备中,基础设施是最为重要的,GPU的型号以及数据直接关系到模型的训练质量和训练时间。例如:使用单个V100的GPU训练具有1750亿个参数的GPT-3将需要约288年,那就更不用提现在动辄万亿参数的大模型。好在随着A100和H100更强算力资源的推出,......
  • 什么是短视频矩阵系统-短视频矩阵系统源码开发流程
    开发和部署短视频矩阵源码涉及的关键步骤包括:环境配置:设置所需的开发环境,如PHP、集成开发环境(IDE)以及数据库。源码集成:将短视频矩阵的源代码导入到IDE中,并配置必要的编译环境和依赖项。配置文件调整:根据开发环境的具体要求,修改数据库和服务器的配置文件。数据库构建:建立数......
  • 专栏前言:人工智能常见流程
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......
  • java流程控制之选择结构
    if单选择结构:我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表达。语法为:if(布尔表达式){//为true执行语句}if双选择结构:两个判断,if-else。语法为:if(布尔表达式){//为true执行语句}else{//为......
  • 高通ADSP USB流程
    在高通平台上,ADSP(AudioDigitalSignalProcessor,音频数字信号处理器)可以通过USB接口与主机进行数据传输,以下是大致的ADSPUSB流程:主机发起USB设备请求:主机会通过USB总线发起设备请求,以与ADSP进行通信。ADSP会响应这些请求,并根据请求类型进行相应的操作。配置USB通......