springmvc

一、springmvc简介

 

二、springmvc入门案例 

步骤如下所示:

 

 

 

 代码演示如下所示:

小细节:项目中全部步骤完成之后,把这个web.xml文件删除掉

第一步:导入坐标

第二步:创建springmvc控制器类(等同于servlet类)

@ResponseBody注解作用:设置返回值类型,也就是说响应给客户端数据的注解

 第三步:初始化springmvc环境,设定springmvc加载对应的bean

 第四步:告诉tomcat服务器加载springmvc环境(web容器)

package com.itheima.config;


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

/**
 *  第四步: 告诉tomcat服务器初始化servlet容器,加载springmvc环境
 *
 *      实现: 必须要继承 AbstractDispatcherServletInitializer
 */

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

    /**
     *  该方法的作用就是:加载springmvc容器配置的方法
     *
     *  AnnotationConfigWebApplicationContext ctx =new AnnotationConfigWebApplicationContext();
     *         ctx.register(SpringMvcConfig.class); // 括号里面对应的就是那个加载初始化springmvc环境的类
     *         return ctx;
     */
    @Override
    protected WebApplicationContext createServletApplicationContext() {

        AnnotationConfigWebApplicationContext ctx =new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);    // SpringMvcConfig.class 对应的就是第三步:初始化springmvc环境的类
        return ctx;
    }

    /**
     *  该方法的作用是:设置哪些客户端请求归属springmvc处理
     *
     *      做法: 直接返回{"/"} 表明所有的客户端请求都归属springmvc进行处理
     */

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

    /**
     *  该方法的作用是:加载spring容器配置
     *
     */
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

开启tomcat服务器,客户端进行请求资源:

 

二、入门案例的工作流程 (必须理解)

三、springmvc容器(springmvcConfig)与 spring容器(springConfig)共存时,做各自的业务方式

注意:是不希望加载到表现层controller包下的对象,不是config包下的对象

 也就是说:springmvc容器(springmvcConfig)等同于servlet,是专门做表现层方面的业务的,因此我们希望springmvcConfig中@ComponentScan("com.itheima.controller")注解加载到表现层包下的含有注解bean的对象当中,这样我们就可以访问获取该对象的资源了

而spring容器(springConfig)是专门做业务逻辑层、数据层方面的业务的,因此我们希望springConfig中@ComponentScan("com.itheima")注解加载到业务逻辑层和数据层包下的含有注解bean的对象当中,但是我们springConfig容器中注解@ComponentScan("com.itheima")到itheima包,而itheima包下含有表现层包、业务逻辑层包、数据层包、但是因为我们不对表现层做业务处理,因此我们不想让springConfig容器加载到表现层包,所以需要进行排除该表现层包中的含有注解对象(排除后,spring容器就获取不到该含有注解的对象了)

代码演示如下所示:

springmvc容器:

spring容器:(就是用以下两种方法,让spring容器扫描bean注解的时候,排除掉表现层controller包下的UserController含有bean注解的对象,排出后也就是说spring容器就获取不到该bean对象了

 

 测试程序,测试spring容器是否排除了表现层的含有bean注解的UserController对象(如果排除了就获取不到该UserController对象了):

 但注意:用那两种方法排除表现层controller包下的含有bean对象的同时,要把springmvc容器中的扫描注解注释掉,因为springmvc扫描路径是到表现层controller包下的,通俗点说,在项目中只要有@ComponentScan注解,无论是spring容器,还是springmvc容器,该注解都是会被执行的,也就是说,虽然spring容器中排除了对表现层controller包下含有bean对象的获取,但是springmvc中因为含有@ComponentScan注解到表现层controller包下,因此spring排除就会失败

因此注释掉就完事了,不注释掉spring容器就会排除失败

 结果程序测试的结果发现spring容器本来扫描到itheima包下,却发现确实排除掉表现层包下的含有bean注解的UserController对象了(获取不到该UserController对象了):

3.1、如果我们真的想让tomcat服务器加载spring环境,那么就需要我们和tomcat服务器加载springmvc时操作一样了,操作如下所示:

把上述代码更 简化写法:继承 AbstractAnnotationConfigDispatcherServletInitializer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值