[SPRING] Spring 컨텍스트가 두 번로드되는 이유는 무엇입니까?
SPRINGSpring 컨텍스트가 두 번로드되는 이유는 무엇입니까?
봄과 봄 보안 웹 프로젝트가 있습니다. 내 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>
서버 로그에서 스프링 컨텍스트가 두 번로드되는 것을 봅니다 (스프링 bean 초기화, 데이터베이스 생성 ...). 처음에는 DispatcherServlet이이를 수행하고 ContextLoaderListener는 secont 시간에 수행합니다. 어떻게 해결할 수 있습니까?
이 튜토리얼에서는 contextParam이 제공되면 서블릿 init-params가 필요 없다는 것을 알 수 있습니다. 하지만 init params를 제거하면 다음과 같은 오류가 발생합니다. "org.apache.catalina.LifecycleException : org.apache.catalina.LifecycleException : java.io.FileNotFoundException : ServletContext 자원 [/WEB-INF/billboard-servlet.xml]을 열 수 없습니다. ". Dispather 서블릿은 기본 위치에서 컨텍스트 구성을 찾습니다.
해결법
-
==============================
1.여전히 서블릿에 대한 컨텍스트가 필요합니다.
여전히 서블릿에 대한 컨텍스트가 필요합니다.
ContextLoaderListener에서 context-param으로로드 할 필요는 없습니다.
security-config.xml을 context-param (보안은 애플리케이션마다 전역 적이어야 함)으로두고 billboard-servlet.xml을 서블릿의 contextConfigLocation으로 사용해야하며 작동해야합니다.
-
==============================
2.나는 같은 문제가 있었고 그 이유는 다음과 같았다.
나는 같은 문제가 있었고 그 이유는 다음과 같았다.
1 load-on-startup -
==============================
3.이것들은 같은 일을하는 두 개의 독립적 인 방법입니다. 예를 들어 ContextLoaderListener를 삭제합니다.
이것들은 같은 일을하는 두 개의 독립적 인 방법입니다. 예를 들어 ContextLoaderListener를 삭제합니다.
-
==============================
4.Spring delegatingFilterProxy가 있으므로 contextLoaderLister를 삭제하면 아래 예외가 발생합니다.
Spring delegatingFilterProxy가 있으므로 contextLoaderLister를 삭제하면 아래 예외가 발생합니다.
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
따라서 dispatcher 서블릿을 통해 contextLoaderLister 및 billboard-servlet.xml을 통해 security-config.xml을로드하십시오.
from https://stackoverflow.com/questions/11409237/why-spring-context-is-loaded-twice by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 소셜 공급자를 사용하여 성공한 로그인 후 리디렉션 URL을 설정하는 방법 (0) | 2019.04.09 |
---|---|
[SPRING] Java 9 : java.lang.ClassNotFoundException : Spring Boot 응용 프로그램의 java.sql.SQLException (0) | 2019.04.09 |
[SPRING] JSON - Spring MVC : spring MVC 컨트롤러에 json 데이터를 게시하는 방법 (0) | 2019.04.09 |
[SPRING] Spring Controller에서 FORM / POST 매개 변수를 가져 오는 방법은 무엇입니까? (0) | 2019.04.09 |
[SPRING] 스프링 HATEOAS와의 정식 _links (0) | 2019.04.09 |