SSM框架学习——SpringMVC简介与入门案例

大家好,欢迎你们来到我的博客,今天心血来潮,我给自己起了一个笔名叫做Lyle。

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人!

博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。

今天开始学习SpringMVC技术~

目录

SpringMVC简介

SpringMVC入门案例

相关注解

入门案例工作流程分析

SpringMVC入门程序开发总结(1+N)

补充AbstractDispatcherServletInitializer知识

如何避免Spring错误的加载到SpringMVC的bean?

最终的bean加载格式

PostMan工具


SpringMVC简介

Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。

  • 模型(Model)封装了应用程序数据,通常它们将由POJO类组成。
  • 视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。
  • 控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。

SpringMVC技术是一种基于Java实现MVC模型的轻量级web框架,与Servlet技术功能等同,均属于web层开发技术。

优点:

  • 使用简单,开发便捷(相比于servlet)
  • 灵活性强

SpringMVC入门案例

①:使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.20</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

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

@Controller
public class UserController {
    @RequestMapping("/save")//设置当前操作的访问路径
    @ResponseBody //设置当前操作的返回值类型
    public String save(){
        System.out.println("user save..");
        return "{'module':'springmvc'}";
    }
}

③:初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

@Configuration
@ComponentScan("test.controller")
public class SpringMvcConfig {
}

④:初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

//定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    //加载springMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringMvcConfig.class);
        return context;
    }
    //设置哪些请求归属springMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //加载spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

我配置的时本地Tomcat,如何配置可以查看我之前的Tomcat使用的文章。

(87条消息) JavaWeb自我学习——Tomcat简介&基本使用_未来程序员Lyle的博客-优快云博客icon-default.png?t=M666https://blog.youkuaiyun.com/weixin_58035422/article/details/123942795?spm=1001.2014.3001.5501没有下载Tomcat可以参考这篇文章。

(87条消息) JavaWeb自我学习——Tomcat的安装与配置_未来程序员Lyle的博客-优快云博客_java中tomcat怎么安装icon-default.png?t=M666https://blog.youkuaiyun.com/weixin_58035422/article/details/123936037?spm=1001.2014.3001.5501访问结果:

 成功访问。

相关注解

名称:@Controller
类型:类注解
位置:SpringMVC控制器类定义上方
作用:设定SpringMVC的核心控制器bean
范例:

@Controller
public class UserController {}

名称:@RequestMapping

类型:方法注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求访问路径

范例:

@RequestMapping("/save")
public void save(){
    system.out.println( "user save ..." );
}

相关属性:
value(默认):请求访问路径

名称:@ResponseBody
类型:方法注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法响应内容为当前返回值,无需解析

范例:
 

@RequestMapping( "/save")
@ResponseBody
public string save(){
    system.out.println("user save ..." );
    return "{'module':'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()方法的返回值作为响应求体返回给请求方

SpringMVC入门程序开发总结(1+N)

一次性工作

  • 创建工程,设置服务器,加载工程
  • 导入坐标
  • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
  • SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)

多次工作

  • 定义处理请求的控制器类
  • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

补充AbstractDispatcherServletInitializer知识

AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化web3.0容器的抽象类。

AbstractDispatcherServletInitializer提供三个接口方法供用户实现:

  • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext
    的作用范围为ServletContext范围,即整个web容器范围
protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringMvcConfig.class);
        return context;
}
  • getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为"/",表示拦截所有请求,任意请求都将转入到SpringMVC进行处理
protected String[] getServletMappings() {
    return new String[]{"/"};
}
  • createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationcontext()
protected WebApplicationContext createRootApplicationContext() {
    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
    context.register(SpringConfig.class);
    return context;
}

如何避免Spring错误的加载到SpringMVC的bean?

SpringMVC控制相关bean是表现层bean
Spring控制的bean为:

  • 业务bean (Service)
  • 功能bean (DataSource等) 

那么问题来了,因为功能不同,如何避免Spring错误的加载到SpringMVC的bean?

加载Spring控制的bean的时候排除掉SpringMVC控制的bean。

SpringMVC相关bean加载控制:

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

Spring相关bean加载控制:

  • 方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean
@ComponentScan(value = "test" ,
        excludeFilters = @ComponentScan.Filter(
                type = FilterType.ANNOTATION,
                classes = Controller.class
        )
)
public class SpringConfig {
}

名称:@ComponentScan

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

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

  • 方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
@Configuration
@ComponentScan({"test.service","test.dao"})
public class SpringConfig {
}
  • 方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中

最终的bean加载格式

public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    //加载springMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringMvcConfig.class);
        return context;
    }
    //设置哪些请求归属springMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //加载spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringConfig.class);
        return context;
    }
}

还有简单的格式,改继承AbstractAnnotationConfigDispatcherServletInitializer类

public class ServletContainerInitConfig 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[]{"/"};
    }
}

该段代码作用与上面的代码(上面的是根,可以知道怎么回事)一样,简化开发。

PostMan工具

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

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

特征:

  • 简单
  • 实用
  • 美观
  • 大方

下载地址:Download Postman (getpostman.com)icon-default.png?t=M666https://app.getpostman.com/app/download/win64

结语:

SpringMVC入门学习到此结束,我是Lyle,我们下次继续深入学习SpringMVC。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Lyle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值