当前位置: 首页 > 面试题库 >

为什么Spring Context被加载两次?

易祯
2023-03-14
问题内容

我有一个带有Spring和Spring安全性的Web项目。我的web.xml:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0" >
        <display-name>BillBoard
        </display-name>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:security-config.xml classpath:billboard-servlet.xml</param-value>
        </context-param>
        <servlet>
            <servlet-name>billboard</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:security-config.xml classpath:billboard-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>

        </servlet>
        <servlet-mapping>
            <servlet-name>billboard</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>

        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>

在服务器日志中,我看到Spring上下文被加载了两次(Spring Bean初始化,数据库创建...)。第一次使用DispatcherServlet进行此操作,第二次使用ContextLoaderListener。我该如何解决?

在本教程中,我看到如果提供了contextParam,则不需要servlet init-params。但是,如果我删除了初始化参数,则会出现错误:“ org.apache.catalina.LifecycleException:org.apache.catalina.LifecycleException:java.io.FileNotFoundException:无法打开ServletContext资源[/WEB-INF/billboard-servlet.xml] ”。Dispather Servlet在默认位置找到上下文配置。


问题答案:

您仍然需要servlet的上下文:

在初始化DispatcherServlet时,Spring MVC在您的Web应用程序的WEB-INF目录中查找名为[servlet-name] -servlet.xml的html" target="_blank">文件,并创建在其中定义的Bean,覆盖所有用相同名称定义的Bean的定义。在全球范围内。

你并不需要把它作为加载context-paramContextLoaderListener虽然。

刚刚离开security-config.xmlcontext-param(它有去那里,因为安全是每个应用程序的全球性),并billboard-servlet.xmlcontextConfigLocation你的servlet的,它应该工作。



 类似资料:
  • 当我转到<代码>/银行/1我看到了预期的账户信息。很好,很好。 当我转到<代码>/银行/1/description我看到了描述(好),但我也看到了帐户信息(不好)。 我习惯了Spring的,如果多个路径匹配,事情就会中断——但即便如此,AFAIK,在我的代码中,无论如何只有一个应该匹配? 银行。Java语言 帐户ction.java 日志输出:

  • 问题内容: 我的活动课在这里: 和相机预览类在这里: 但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩

  • 基本上,这就是我正在做的 1) 将AlarmManager设置为执行广播接收器(BCR) 2) 从BCR启动MyActivity 3)如果我的活动没有打开,请打开屏幕 出于某种原因,我注意到当MyActivity打开时,它的流程如下所示: onCreate/onNewIntent- 我不知道为什么它会马上暂停。我注意到这只发生在屏幕被标志打开时。有人知道为什么会这样吗?有什么办法可以防止这种行为吗

  • 问题内容: 我放 进入我的django项目。当我现在跑步时,我得到 为什么要运行两次?它应该只加载一次。 问题答案: 每个进程只能加载一次。我猜这是分叉的,并且启动了两个单独的过程。你可以打印的结果吗?

  • 我对的理解是,它将触发观察者对当前数据的状态变化,而不是对一系列历史数据的状态变化。 目前,我有一个,它执行写操作,将非垃圾数据更改为垃圾数据。 我还提供了另一个,它观察被丢弃的数据。 请考虑以下场景。 当前有0个被丢弃的数据。 是当前活动的片段。尚未创建。 添加了%1个废数据。 现在,有%1个被丢弃的数据 我们使用导航抽屉,将替换为。 的观察者将首先接收,其中有0个被丢弃的数据 同样,的观察者将

  • 据说 引导类加载器加载位于/jre/lib目录中的核心Java库。 null sun.misc.launcher$AppClassLoader@73d16e93 sun.misc.launcher$AppClassLoader@73d16e93 这很好。 现在,如果将Student Jar文件放入/jre/lib/ext中,输出为 我在想,在这种情况下,学生类应该从引导类加载器加载,为什么它是由应