• SpringMvc(一、基础介绍、快速入门、工作流程


    一、概述

    SpringMvc与Servlet一样,都属于web层的开发。在Web应用程序设计中,MVC模式已经被广泛使用。SpringMVC以DispatcherServlet为核心,负责协调和组织不同组件以完成请求处理并返回响应的工作,实现了MVC模式。

    这时候有人会说,既然SpringMvc与servlet一样,那我们为啥还要学习SpringMvc嘞 

    咱们看一个最基础的servlet的例子 

    在这个servlet中,我们重写了doGet和doPost两个方法,同时让doPost转调doGet对请求进行统一的处理,但是我们通常会编写一个方法对应一个servlet,那么这时候问题就出现了,一个业务最基础都离不开增删改查吧,如果我们每一个方法都写一个servlet去实现业务,代码就显得太过冗余了

    比如这样:

     为了简化我们的开发,SpringMvc就诞生了

    让我们看看SpringMvc的简洁性

    我们只需要新建一个controller类使用

    @RequestMapping为每个方法都添加上对应的 访问路径

    @ResponseBody声明请求体

     就极大程度的简略了代码了

    二、快速入门 

    1,导入依赖

    1. <dependency>
    2. <groupId>javax.servletgroupId>
    3. <artifactId>javax.servlet-apiartifactId>
    4. <version>3.1.0version>
    5. dependency>
    6. <dependency>
    7. <groupId>org.springframeworkgroupId>
    8. <artifactId>spring-webmvcartifactId>
    9. <version>5.3.9version>
    10. dependency>

    2,编写SpringMvc配置类和servlet总配置类

    SpringMvcConfig:

    1. package config;
    2. import org.springframework.context.annotation.ComponentScan;
    3. import org.springframework.context.annotation.Configuration;
    4. @Configuration
    5. @ComponentScan("controller")
    6. public class springMvcConfig {
    7. }

    servletConfig:

    1. package config;
    2. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    3. import org.springframework.web.context.WebApplicationContext;
    4. import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
    5. import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
    6. //servlet启动配置类,加载SpringMvcConfig
    7. public class servletConfig extends AbstractDispatcherServletInitializer {
    8. //加载SpringMvc容器配置
    9. @Override
    10. protected WebApplicationContext createServletApplicationContext() {
    11. AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    12. ctx.register(springMvcConfig.class);
    13. return ctx;
    14. }
    15. //设置SpringMvc管理哪些请求
    16. @Override
    17. protected String[] getServletMappings() {
    18. //所有请求都由SpringMvc处理
    19. return new String[]{"/"};
    20. }
    21. //加载Spring容器配置
    22. @Override
    23. protected WebApplicationContext createRootApplicationContext() {
    24. return null;
    25. }
    26. }

     3,新建Controller层编写测试

    1. package controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.ResponseBody;
    5. @Controller
    6. @RequestMapping("/user")
    7. public class userController {
    8. @ResponseBody
    9. @RequestMapping("/select")
    10. public String select(){
    11. System.out.println("user Test....");
    12. return "{'model':'springMvc'}";
    13. }
    14. @ResponseBody
    15. @RequestMapping("/delete")
    16. public String delete(){
    17. System.out.println("user Test....");
    18. return "{'model':'springMvc'}";
    19. }
    20. @ResponseBody
    21. @RequestMapping("/update")
    22. public String update(){
    23. System.out.println("user Test....");
    24. return "{'model':'springMvc'}";
    25. }
    26. @ResponseBody
    27. @RequestMapping("/add")
    28. public String add(){
    29. System.out.println("user Test....");
    30. return "{'model':'springMvc'}";
    31. }
    32. }

    项目最终路径 

    测试:

    直接访问目标网址

    观察输出结果
     

     到此结束~

    三、工作流程 

    启动服务器初始化流程

    1. 服务器启动,执行serlvetConfig类,初始化web容器
    2. 执行createServletApplicatonContext方法,创建webApplicationContext对象
    3. 调用webApplicationContext对象的register方法注册SpringMvc配置类的信息
    4. 执行SpringMvc内的@componentScan扫描对应的bean
    5. 加载Controller层每一个对应的@RequestMapping的每一个方法
    6. 执行servlerConfig类中的getServletMappings()方法定义哪些请求需要控制

    单次请求流程 

    1. 发送请求localhost+对应的@RequestMapping的value值
    2. web容器判断当前是否被springMvc管理
    3. 解析请求路径
    4. 通过@RequestMapping对应具体的方法
    5. 执行当前方法
    6. 通过@ResponseBody把对应的方法体作为返回数据返回给请求方
  • 相关阅读:
    msys2 |arch pacman:tesseract ocr 安装 - 思源笔记自动调用
    css-vxe-form-item中输入框加自定义按钮(校验位置错误)
    C语言|初始C语言常见问题集(2)
    jvm 内存泄露、内存溢出、栈溢出区别
    【Mybatis】基础部分
    C++ - mysql单词,知识点 函数等等到视图全部语法-语法大全
    linux软连接与硬连接
    文心一言 VS 讯飞星火 VS chatgpt (244)-- 算法导论18.1 2题
    5.Docker 私有库及镜像推送
    JavaWeb-前端开发
  • 原文地址:https://blog.csdn.net/weixin_48841931/article/details/126575464