SpringMVC入门

SpringMVC概述

替代了原来的Servlet

入门案例

SpringMVC环境搭建及测试

1.导入依赖

XML 复制代码
        <!--    SpringMVC-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

2.写Controller

java 复制代码
@Controller
public class UserController {
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        System.out.println("user save...");
        return "{'info':'SpringMVC'}";
    }
}

3.配置SpringMVC的config,让他加载SpringMVC需要的bean

java 复制代码
@Configuration
@ComponentScan("com.example.controller")
public class SpringMVCConfig {
}

4.配置Servlet容器

java 复制代码
public class ServletConfig extends AbstractDispatcherServletInitializer {
    @Override
    //加载SpringMVC的容器
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(SpringMVCConfig.class);
        return context;
    }

    @Override
    //设置哪些请求归属于SpringMVC处理
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    //加载Spring容器配置  SpringMVC底层会用到Spring
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

启动Tomcat服务器,访问/save路径

流程分析

bean加载控制

我的目录结构

Spring需要加载除controller外的所有包,SpringMVC需要加载controller包

SpringMVCConfig

SpringConfig

方式1

方式2

这里会出现的一个问题是,由于SpringMVCConfig也用@Configuration注解,尽管SpringConfig已经把Controller排除了,但是SpringConfig 在扫描com.example包时 会调用SpringMVCConfig(里面加载了Controller) 把Controller重新加载回来,这样调用Spring的上下文对象仍然能得到Controller的实例化对象。测试代码和结果如下:

解决方法:

1.把这两个config都移到com.example包的外面,这样他们两个就不会被重复加载了。

2.SpringConfig加载的时候过滤@Component注解

方式3

这种方式下不区分Spring和SpringMVC的环境(这句话的意思是我们不需要显式地用@Component去定义SpringMVC和Spring的bean了(或者都扫同一个包?),也就是Spring和SpringMVC整合起来了,SpringMVC会用到Spring的bean

ServletConfig

java 复制代码
public class ServletConfig extends AbstractDispatcherServletInitializer {
    @Override
    //加载SpringMVC的容器
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();//初始化web容器
        context.register(SpringMVCConfig.class);
        return context;
    }

    @Override
    //设置哪些请求归属于SpringMVC处理
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    //加载Spring容器配置  这里加载Spring,不区分Spring和SpringMVC环境
    protected WebApplicationContext createRootApplicationContext() {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();//初始化springIoC容器
        context.register(SpringConfig.class);
        return context;
    }
}

ServletConfig优化(继承这个长长的东西)

代码量更少了

java 复制代码
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    //加载Spring容器配置
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    //加载SpringMVC的容器
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    @Override
    //设置所有请求都归属于SpringMVC处理
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}
相关推荐
Lx35214 小时前
Hadoop容错机制深度解析:保障作业稳定运行
大数据·hadoop
IT毕设梦工厂21 小时前
大数据毕业设计选题推荐-基于大数据的客户购物订单数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·数据分析·spark·毕业设计·源码·bigdata
大数据CLUB1 天前
基于spark的澳洲光伏发电站选址预测
大数据·hadoop·分布式·数据分析·spark·数据开发
计算机编程小央姐1 天前
跟上大数据时代步伐:食物营养数据可视化分析系统技术前沿解析
大数据·hadoop·信息可视化·spark·django·课程设计·食物
IT学长编程1 天前
计算机毕业设计 基于Hadoop的健康饮食推荐系统的设计与实现 Java 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
java·大数据·hadoop·毕业设计·课程设计·推荐算法·毕业论文
Lx3522 天前
Hadoop数据一致性保障:处理分布式系统常见问题
大数据·hadoop
IT学长编程2 天前
计算机毕业设计 基于Hadoop豆瓣电影数据可视化分析设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试
大数据·hadoop·python·django·毕业设计·毕业论文·豆瓣电影数据可视化分析
Dobby_052 天前
【Hadoop】Yarn:Hadoop 生态的资源操作系统
大数据·hadoop·分布式·yarn
笨蛋少年派2 天前
安装Hadoop中遇到的一些问题和解决
大数据·hadoop·分布式