SpringMVC概述(二)

简介: SpringMVC概述(二)

3. 入门案例工作流程分析


3.1 启动服务器初始化过程


服务器启动,执行ServletContainersInitConfig类,初始化web容器

执行createServletApplicationContext方法,创建了WebApplicationContext对象

加载SpringMvcConfig配置类

执行@ComponentScan加载对应的bean

加载UserController,每个@RequestMapping的名称对应一个具体的方法

执行getServletMappings方法,定义所有的请求都通过SpringMVC


e8ca117e7d1c95a20535cabbcf51df91_aef5cf76b554e24f1d89b468a75b541a.png


3.2 单次请求过程


发送请求localhost/save

web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理

解析请求路径/save

由/save匹配执行对应的方法save()

执行save()

检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方


82912b43269d4270fd2046e8a10d2e02_d8c7922908cdb5b849ab7bcaa38f0494.png


4. Controller加载控制


问题导入


因为功能不同,如何避免Spring错误的加载到SpringMVC的bean?


4.1 Controller加载控制与业务bean加载控制


SpringMVC相关bean(表现层bean)


Spring控制的bean


业务bean(Service)


功能bean(DataSource等)


SpringMVC相关bean加载控制


SpringMVC加载的bean对应的包均在com.itheima.controller包内

Spring相关bean加载控制


方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean

方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等

方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中


4.2 Spring相关bean加载控制


方式一代码实现


名称:@ComponentScan

类型:类注解

范例


@Configuration
@ComponentScan(value = "com.itheima",
               excludeFilters = @ComponentScan.Filter(
                   type = FilterType.ANNOTATION,
                   classes = Controller.class
               )
              )
public class SpringConfig {
}


属性


excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)

includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)


4.3 Bean的加载格式


public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { 
    protected WebApplicationContext createServletApplicationContext() { 
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;  
    }   
    protected WebApplicationContext createRootApplicationContext() {  
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();      
        ctx.register(SpringConfig.class);        
        return ctx;  
    }   
    protected String[] getServletMappings() { 
        return new String[]{"/"}; 
    }
}


简化格式


public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class}
    };
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
}


5. PostMan【工具】


02921edcac384c2def5b20b98b762983_image-20210804194708518.png


5.1 PostMan介绍


Postman是一款功能强大的网页调试与发送网页HTTP请求的软件。

作用:常用于进行接口测试

特征

简单

实用

美观

大方


5.2 PostMan安装


双击官网下载的“Postman-win64-8.3.1-Setup.exe”即可自动按照,打开之后需要注册,如果底部有如下链接,可以点击跳过注册



5.3 PostMan的使用


5.3.1 创建WorkSpace工作空间


0f233bf781d37bd8d41c639a24a8c6f6_05989b377fa6d0d5b481aa6567ece7ce.png


5.3.2 发送请求获取json数据


c343b2f8bf83f6adf7e98463e841934e_59c0a540c85f667e137a479d25ef1065.png


5.3.3 保存当前请求


07b5e811a1d89c2a78c78661956f9daa_32d55e0e7cc43738127a889e91d14846.png


注意:第一次请求需要创建一个新的目录,后面就不需要创建新目录,直接保存到已经创建好的目录即可。

相关文章
|
Java Maven
启动SpringBoot 错误: 找不到或无法加载主类 com.xx.xxApplication
1、在项目名称上右击–Reload from disk 2、清理项目里面的class文件进行重新编译, 鼠标点击右侧Maven,找到项目名称,然后点击Lifecycle中的clean/compile/install
2772 1
|
NoSQL Redis 数据安全/隐私保护
redis高可用环境搭建(主从+哨兵)
redis高可用环境搭建(主从+哨兵)
213 0
|
弹性计算 Serverless 应用服务中间件
Serverless 应用引擎操作报错合集之阿里函数计算中出现'python app.py'的错误如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
207 3
|
PHP
php实现归并排序
php实现归并排序
79 2
|
数据采集 监控 安全
网络安全产品之认识入侵检测系统
随着计算机网络技术的快速发展和网络攻击的不断增多,单纯的防火墙策略已经无法满足对安全高度敏感的部门的需要,网络的防卫必须采用一种纵深的、多样的手段。因此,入侵检测系统作为新一代安全保障技术,成为了传统安全防护措施的必要、有效的补充。[《安全防御之入侵检测与防范技术》](http://xiejava.ishareread.com/posts/48309864/)介绍了入侵检测技术,今天让我们从入侵检测系统的工作原理、主要功能、主要类型及与入侵防御系统的关系与区别等方面认识入侵检测系统。
593 2
|
前端开发 JavaScript
React-Hooks-useReducer
React-Hooks-useReducer
118 0
|
Java Maven
Gradle、Maven使用阿里镜像源
Gradle、Maven使用阿里镜像源
48923 1
|
存储 数据可视化 数据管理
你的元数据是否成功管理
如果Google可以在几秒钟内在整个互联网上交付搜索结果,那为什么在我的组织中寻找东西时会遇到很多麻烦呢?
你的元数据是否成功管理
|
Java API Maven
【Android 高性能音频】hello-oboe 示例解析 ( Oboe 源代码依赖 | CMakeList.txt 构建脚本分析 | Oboe 源代码构建脚本分析 )
【Android 高性能音频】hello-oboe 示例解析 ( Oboe 源代码依赖 | CMakeList.txt 构建脚本分析 | Oboe 源代码构建脚本分析 )
387 1
【Android 高性能音频】hello-oboe 示例解析 ( Oboe 源代码依赖 | CMakeList.txt 构建脚本分析 | Oboe 源代码构建脚本分析 )
|
机器学习/深度学习 数据采集 开发框架
阿觿学长最近参加了高教社的全国大学生数学建模竞赛,整理了一些国赛的获奖模型,和大家分享~
阿觿学长最近参加了高教社的全国大学生数学建模竞赛,整理了一些国赛的获奖模型,和大家分享~
303 0
阿觿学长最近参加了高教社的全国大学生数学建模竞赛,整理了一些国赛的获奖模型,和大家分享~