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 分钟前
Jmeter中的配置原件(四)
java·前端·功能测试·jmeter·1024程序员节
yava_free28 分钟前
JVM这个工具的使用方法
java·jvm
不会编程的懒洋洋1 小时前
Spring Cloud Eureka 服务注册与发现
java·笔记·后端·学习·spring·spring cloud·eureka
赖龙1 小时前
java程序打包及执行 jar命令及运行jar文件
java·pycharm·jar
U12Euphoria1 小时前
java的runnable jar采用exe和.bat两种方式解决jre环境的问题
java·pycharm·jar
java小吕布1 小时前
Java Lambda表达式详解:函数式编程的简洁之道
java·开发语言
NiNg_1_2341 小时前
SpringSecurity入门
后端·spring·springboot·springsecurity
程序员劝退师_1 小时前
优惠券秒杀的背后原理
java·数据库
java小吕布2 小时前
Java集合框架之Collection集合遍历
java
一二小选手2 小时前
【Java Web】分页查询
java·开发语言