[SPRING] 하나의 Spring 애플리케이션에서 web.xml에 여러 서블릿을 등록하는 방법
SPRING하나의 Spring 애플리케이션에서 web.xml에 여러 서블릿을 등록하는 방법
Spring web.xml에 두 개의 서블릿을 정의하고자한다. 하나는 애플리케이션 html / JSP 페이지이고 다른 하나는 외부 애플리케이션에 의해 호출 될 웹 서비스이다. 다음은 web.xml입니다.
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/user-service-servlet.xml</param-value>
</context-param>
<servlet>
<servlet-name>user-webservice</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>user-webservice</servlet-name>
<url-pattern>/UserService/*</url-pattern>
</servlet-mapping>
myservlet 자체적으로 파일에서 DispatcherServlet을 사용하면 정상적으로 작동합니다. 내가 config-file-user-service-servlet.xml 파일을위한 context-param을 가진 user-webservice를 가지고 있다면 잘 동작한다. 그러나 파일에 둘 다 있으면 myservlet-servlet.xml 파일이 자동으로로드되지 않으므로 myservlet이 작동하지 않습니다. 컨텍스트 매개 변수를 제거하면 myservlet이 작동하지만 구성 파일 (user-service-servlet.xml)이로드되지 않아서 user-webservice가 작동하지 않습니다.
서블릿을 모두 정의하고 두 구성 파일을 모두로드 할 수 있습니까?
해결법
-
==============================
1.cxf-user 메일 링리스트의이 스레드에서 설명했듯이 CXFServlet이 user-webservice-servlet.xml에서 자체 스프링 컨텍스트를로드하는 대신 루트 전체 컨텍스트에 전체를로드 할 수 있습니다. 기존 user-webservice-servlet.xml의 이름을 다른 이름 (예 : user-webservice-beans.xml)으로 변경 한 다음 contextConfigLocation 매개 변수를 다음과 같이 변경합니다.
cxf-user 메일 링리스트의이 스레드에서 설명했듯이 CXFServlet이 user-webservice-servlet.xml에서 자체 스프링 컨텍스트를로드하는 대신 루트 전체 컨텍스트에 전체를로드 할 수 있습니다. 기존 user-webservice-servlet.xml의 이름을 다른 이름 (예 : user-webservice-beans.xml)으로 변경 한 다음 contextConfigLocation 매개 변수를 다음과 같이 변경합니다.
<servlet> <servlet-name>myservlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myservlet</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml /WEB-INF/user-webservice-beans.xml </param-value> </context-param> <servlet> <servlet-name>user-webservice</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>user-webservice</servlet-name> <url-pattern>/UserService/*</url-pattern> </servlet-mapping>
-
==============================
2.다음과 같이 config를 사용하십시오 :
다음과 같이 config를 사용하십시오 :
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>user-webservice</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet>
다음 세 개의 파일이 필요합니다.
* -servlet.xml 파일은 자동으로 사용되며 각각은 해당 서블릿에 대한 응용 프로그램 컨텍스트를 작성합니다.
Spring의 문서에서, 13.2. DispatcherServlet :
-
==============================
3.나는 이것이 조금 오래되었다는 것을 압니다. 그러나 짧은 대답은
일 것입니다. 두 사건 모두 1 번 같은 id를 두 번 부여했습니다. 이로 인해로드 순서가 혼란 스러울 수 있습니다. 나는 이것이 조금 오래되었다는 것을 압니다. 그러나 짧은 대답은
일 것입니다. 두 사건 모두 1 번 같은 id를 두 번 부여했습니다. 이로 인해로드 순서가 혼란 스러울 수 있습니다.
from https://stackoverflow.com/questions/1865088/how-to-register-multiple-servlets-in-web-xml-in-one-spring-application by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC REST 컨트롤러에서 HTTP 헤더 정보에 액세스하는 방법은 무엇입니까? (0) | 2018.12.30 |
---|---|
[SPRING] JPA 트랜잭션을 커밋 할 수 없음 : rollbackOnly로 표시된 트랜잭션 (0) | 2018.12.29 |
[SPRING] Spring Data JPA는 메소드 이름 해석을 사용하여 엔티티를 셀 수있는 방법이 있습니까? (0) | 2018.12.29 |
[SPRING] Spring은 실제로 어떻게 부트 스트랩을합니까? (0) | 2018.12.29 |
[SPRING] Hibernate 4.2와 Spring 3.1.1을 사용하여 MultiTenantConnectionProvider 설정하기 (0) | 2018.12.29 |