SpringMVC(详解)

发布于:2023-02-08 ⋅ 阅读:(707) ⋅ 点赞:(0)

SpringMVC学习目标:

🛳️ 1、掌握基于SpringMVC获取请求参数与响应json数据操作
🛳️ 2、熟练应用基于REST风格的请求路径设置与参数传递
🛳️ 3、能够根据实际业务建立前后端开发通信协议并进行实现
🛳️ 4、基于SSM整合技术开发任意业务功能
在这里插入图片描述

一、SpringMVC概述

➠SpringMVC是一种基于Java实现MVC模型的轻量级 web框架

是一种表现层框架技术,用于进行表现层功能开发

SpringMVC技术与Servlet技术功能等同,均属于web层开发技术

二、SpringMVC入门

●初始化 SpringMVC项目环境

新建模块,选择使用webapp的骨架
在这里插入图片描述
在这里插入图片描述

添加源码目录(web程序骨架没有源码目录)
在这里插入图片描述

●SpringMVC项目的开发

导入SpringMVC坐标与Servlet坐标

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
</dependencies>

创建SpringMVC控制器类( 等同于Servlet功能)

package com.GY.controller;

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

//开发表现层bean(SpringMvc开发专用声明bean的注解)
@Controller
public class UserController {
    /* 用户发送哪个请求能调用到save()方法?
    //设置当前操作的访问路径(调用名称,返回Json数据)*/
    @RequestMapping("/save")
    //设置当前操作的返回值类型
    @ResponseBody
    public String save(){
        System.out.println("save........");
        return "{...springmvc...}";
    }
}

初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean
在这里插入图片描述

初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术请求(web容器的配置类)

package com.GY.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

//4、定义一个servlet容器启动的配置类,在里面加载Spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //Tomcat容器加载springmvc配置
    protected WebApplicationContext createServletApplicationContext(){
        AnnotationConfigWebApplicationContext A=new AnnotationConfigWebApplicationContext();
    //注册配置
        A.register(SpringmvcConfig.class);
        return A;
    }
    //配置拦截请求,设置哪些请求归属springMVC处理(此时Tomcat接收的所有请求将交由SpringMVC处理)
    protected  String []getServletMappings(){
    //所有请求归springMVC处理
        return new String[]{"/"};
    }
    //加载spring容器配置
    protected WebApplicationContext createRootApplicationContext(){
        return  null;
    }
}

此时我们便可启动服务器
●配置tomcat插件

<build>
       <plugins>
           <plugin>
                   <groupId>org.apache.tomcat.maven</groupId>
                   <artifactId>tomcat7-maven-plugin</artifactId>
                   <version>2.1</version>
                   <configuration>
                     <port>80</port>
                     <path>/</path>
                    </configuration>
           </plugin>
       </plugins>
   </build>

●启动程序
在这里插入图片描述

🎊🎊️️
tomcat启动成功
在这里插入图片描述

🛳️🛳️🛳️
在浏览器进行访问(请求成功并且成功打印)
在这里插入图片描述
在这里插入图片描述

三、SpringMVC入门开发总结

在这里插入图片描述

四、SpringMVC工作流程分析

●启动服务器初始化过程

在这里插入图片描述
1、服务器启动,执行ServletContainersInitConfig类,初始化web容器
2、执行createServletApplicationContext方法,创建WebApplicationContext(SpringMVC容器)对象
3、加载SpringMvcConfig
4、执行@ComponentScan加载对应的bean
5、加载UserController,每个@RequestMapping的名称对应一个具体的方法
6、 执行getServletMapping方法,定义所有的请求都通过SpringMVC

●单次请求过程

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

五、SpringMVC-Controller加载控制与业务bean加载控制

➠SpringMVC相关的bean(表现层bean)

➠Spring控制的bean
●业务bean(Service)
●功能bean(DateSource等)

🚸思考
1、因为功能不同,如何避免Spring错误的加载到SpringMVC的bean?
SpringMVC的bean一一加载Spring控制的bean的时候排除掉SpringMVC控制的bean

🛳️方法
SpringMVC相关bean加载控制
●SpringMVC加载的bean对应的包均在com.GY.controller

Spring相关bean加载控制
●方式一:Spring加载的bean设定扫描范围为com.GY,排除controller包内的bean

@Configuration
@ComponentScan(value = "com.GY",
        excludeFilters = @ComponentScan.Filter(
        //按注解过滤(排除)
        type = FilterType.ANNOTATION,
        classes = Controller.class
)
)
public class SpringConfig {
}

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

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

六、SpringMVC-简化Servlet容器配置类

将Servlet容器配置类继承 AbstractAnnotationConfigDispatcherServletInitializer类 (AbstractDispatcherServletInitializer的子类)

package com.GY.controller.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringmvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到