SpringMVC+入门案例

一、入门案例

1.依赖导入

java 复制代码
<!--1. 导入SpringMVC与servlet的坐标-->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>

这里javax.servlet-api这个依赖一定要确定范围为provided

  • scope是maven中jar包依赖作用范围的描述
  • 如果不设置默认是compile在在编译、运行、测试时均有效
  • 如果运行有效的话就会和tomcat中的servlet-api包发生冲突,导致启动报错
  • provided代表的是该包只在编译和测试的时候用,运行的时候无效直接使用tomcat中的,就避 免冲突

2.创建控制器类

java 复制代码
//2.制作控制器类,等同于Servlet
//2.1必须是一个spring管理的bean
//2.2定义具体处理请求的方法
//2.3设置当前方法的访问路径
//2.4设置响应结果为json数据
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'springmvc'}";

//设置映射路径为/delete,即外部访问路径
    @RequestMapping("/delete")
    @ResponseBody
    public String delete(){
        System.out.println("user save ...");
        return "{'info':'springmvc'}";
    }
}
}

3.创建配置类

注意springmvc只加载表示层,即@Controller注释修饰的即可,故,在@ComponentScan中指定到controller包中的Bean就行

java 复制代码
//3.定义配置类加载Controller对应的bean
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}

4.创建Tomcat的Servlet容器配置

java 复制代码
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    protected WebApplicationContext createServletApplicationContext() {
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载指定配置类
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

总结:

  • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器 的抽象类
  • AbstractDispatcherServletInitializer提供三个接口方法供用户实现
  • createRootApplicationContext()方法,如果创建Servlet容器时需要加载非 SpringMVC对应的bean,使用当前方法进行,使用方式同 createServletApplicationContext()
  • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对 应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围 ngetServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所 有请求,任意请求都将转入到SpringMVC进行处理 createServletApplicationContext用来加载SpringMVC环境 createRootApplicationContext用来加载Spring环境

5.配置Tomcat环境

二、知识点

三、流程分析

1.启动服务器初始化过程

2. 单次请求过程

四、Bean的加载控制

目录结构:

问题分析:

原代码:

思路分析:

解决方法:

方法一常用

方法二很鸡肋,有个小细节要十分注意,测试的时候,需要把SpringMvcConfig配置类上的@ComponentScan注解注释掉,否则不会 报错 ,也就是分开不成功。

原因是

补充创建Tomcat的Servlet容器配置文件的另类简洁写法

java 复制代码
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
相关推荐
信码由缰4 分钟前
Spring框架中的Component与Bean注解
java·spring
Re2757 分钟前
快速理解Spring Bean 实例化与初始化全过程
后端·spring
程序员秘密基地34 分钟前
基于html,css,vue,vscode,java,springboot,mysql数据库,在线考勤,管理系统
java·vue.js·spring·html·web app
hello 早上好1 小时前
多线程(1)
java
paopaokaka_luck2 小时前
基于Spring Boot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
java·spring boot·后端
kk_stoper2 小时前
使用Ruby接入实时行情API教程
java·开发语言·javascript·数据结构·后端·python·ruby
我会冲击波2 小时前
告别flag与status:如何为你的布尔值(boolean)变量优雅命名?
java·后端
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
如何将一个本地的jar包安装到 Maven 仓库中
java·maven·jar
N维世界2 小时前
Mybatis-XML映射文件
xml·java·mybatis
弹简特3 小时前
【Java SE】Arrays工具类
java·开发语言