文天大人 2017-12-25 09:01 采纳率: 75%
浏览 888
已结题

关于SpringMVC的ContextLoader类中的一个疑问

我一直不太明白,在initWebApplicationContext方法的第一行,

 if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) != null) {
            throw new IllegalStateException(
                    "Cannot initialize context because there is already a root application context present - " +
                    "check whether you have multiple ContextLoader* definitions in your web.xml!");
        }

请问各位大佬,难道servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) 何时不等于null呢??为什么要判断一下不等于null呢?服务刚启动的时候,还有不等于null的时候吗?之前学习servlet的时候并没有太认真学,还请各位大神帮忙解释一下,在此感谢

  • 写回答

7条回答 默认 最新

  • jasondyoung 2017-12-25 09:07
    关注

    没看它抛异常的翻译嘛。
    不能初始化context,因为已经有一个root应用context存在。检查你的web.xml中是否有多个ContextLoader 定义 。

    评论
  • kun_hello 2017-12-25 09:15
    关注
    评论
  • 杨_5426 2017-12-25 09:16
    关注

    这个就是编程的严谨性啊,要往一个容器里放东西,先要判断一下容器里有没有东西。
    逻辑性严密,才不容易出错。

    评论
  • 「已注销」 2017-12-25 09:26
    关注

    了解下 Java 的类加载机制就可以知道了.
    他这是确保 WebApplicationContext 已被初始化.

    评论
  • jeffer_liu 2017-12-25 13:09
    关注

    健壮性的体现,防止瞎狗乱写

    评论
  • JPF1024 2017-12-25 15:18
    关注

    由于已经存在根应用程序上下文,因此无法初始化上下文

    检查你的web.xml中是否有多个ContextLoader 定义

    翻译

    评论
  • 文天大人 2017-12-26 02:32
    关注

    我已经知道答案了,spring3.0之前,启动的方式有两种ContextLoaderListener和ContextLoaderServlet,spring不知道是listener还是servlet,所以才判断一下,3.0之后,ContextLoaderServlet这个类被删除了,也就是说只有一个ContextLoaderListener了,但是他为了以后有可能在加上类似ContextLoaderServlet类,所以没有删掉这个if判断,但是对于现在来说,这个if判断,果然没有一点用途,因为它百分之百是null,spring不加新特性的话,它永远不会走if里的内容,这才是我想要的答案,你们这些人其实和我一样,对spring一知半解,但是不如我,因为我知道问,你们知道不懂装懂

    评论

报告相同问题?

悬赏问题

  • ¥15 无法加载以下来源的扩展程序
  • ¥30 关于#oracle soa#的问题,请各位专家解答!
  • ¥15 mounriver里怎么对电机初始化是对pwm初始化函数和gpio初始化函数吗
  • ¥15 anaconda第一步就出不来了,文件名错误
  • ¥15 这个排列组合问题的思路哪个地方有错
  • ¥15 首页运行报错,首页运行报错
  • ¥15 jupyter里pandas为什么调用不了
  • ¥15 解决neuralprophet库运行报错
  • ¥20 想通过nas 配置一台iis服务器
  • ¥30 利用python编写元胞自动机教室火灾出逃,计算最佳出逃时间