gpt4 book ai didi

java - Tomcat 中的多个 Web 应用程序

转载 作者:行者123 更新时间:2023-11-28 22:37:37 26 4
gpt4 key购买 nike

我正在开发两个 spring web 应用程序,我想将它部署在 apache tomcat 8.0.3 上。现在我的麻烦是,如果我将其中一个 Web 应用程序放在 webapp 文件夹中(通过 tomcat7:deploy)一切正常,但如果我将它们都放在 webapps 文件夹中,那么这两个应用程序中只有一个可以工作。如果我尝试加载无法运行的应用程序,我会收到 404 错误。

这是 webapp 文件夹结构:

> $CATALINA_HOME/webapps/  
> $CATALINA_HOME/webapps/MyApp1/
> $CATALINA_HOME/webapps/MyApp1/...
> $CATALINA_HOME/webapps/MyApp2/
> $CATALINA_HOME/webapps/MyApp2/...

我尝试通过以下网址访问:

> http://localhost:8080/MyApp1
> http://localhost:8080/MyApp2

MyApp1 的 web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>MyApp1</display-name>


<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-MyApp1-context.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<session-config>
<session-timeout>30</session-timeout>
</session-config>

<servlet>
<servlet-name>MyApp1Servlet</servlet-name>
<servlet-class>it.myCompany.servlet.springVaadin.AutowiringApplicationServlet</servlet-class>
<init-param>
<description>Vaadin UI class to use</description>
<param-name>UI</param-name>
<param-value>it.myCompany.vaadin.application.myApplication</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>MyApp1Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>

MyApp2 的 web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>MyApp2</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-MyApp2-context.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

<servlet>
<servlet-name>MyApp2Servlet</servlet-name>
<servlet-class>it.myCompany.servlet.springVaadin.AutowiringApplicationServlet</servlet-class>
<init-param>
<description>Vaadin UI class to use</description>
<param-name>UI</param-name>
<param-value>it.myCompany.vaadin.application.myUI</param-value>
</init-param>


</servlet>


<servlet-mapping>
<servlet-name>MyApp2Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>30</session-timeout>
</session-config>

</web-app>

这是我的 catalina.out:

    09-May-2014 09:24:24.956 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
INFO ContextLoader - Root WebApplicationContext: initialization started
INFO XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Fri May 09 09:24:25 CEST 2014]; root of context hierarchy
INFO XmlBeanDefinitionReader - Loading XML bean definitions from URL [file:/home/user/apache-tomcat-8.0.3/webapps/MyApp1/WEB-INF/classes/spring-context.xml]
INFO ClassPathBeanDefinitionScanner - JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
INFO XmlBeanDefinitionReader - Loading XML bean definitions from URL [file:/home/user/apache-tomcat-8.0.3/webapps/MyApp1/WEB-INF/classes/database.xml]
INFO XmlWebApplicationContext - Bean 'org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver#17f0811' of type [class org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO XmlWebApplicationContext - Bean 'eclipseLinkJpaVendorAdapter' of type [class org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO LocalContainerEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'MyApp1Unit'
INFO XmlWebApplicationContext - Bean 'entityManagerFactory' of type [class org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO XmlWebApplicationContext - Bean 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0' of type [class org.springframework.transaction.annotation.AnnotationTransactionAttributeSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
INFO XmlWebApplicationContext - Bean 'org.springframework.transaction.config.internalTransactionAdvisor' of type [class org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
[EL Info]: 2014-05-09 09:24:58.84--ServerSession(28685765)--EclipseLink, version: Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5
[EL Info]: connection: 2014-05-09 09:25:03.114--ServerSession(28685765)--file:/home/user/apache-tomcat-8.0.3/webapps/MyApp1/WEB-INF/lib/model-0.0.1-SNAPSHOT.jar_MyApp1Unit login successful
INFO ContextLoader - Root WebApplicationContext: initialization completed in 47167 ms
09-May-2014 09:25:12.644 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /home/user/apache-tomcat-8.0.3/webapps/MyApp2.war
09-May-2014 09:25:12.646 WARNING [localhost-startStop-1] org.apache.catalina.startup.SetContextPropertiesRule.begin [SetContextPropertiesRule]{Context} Setting property 'antiJARLocking' to 'true' did not find a matching property.
09-May-2014 09:25:35.098 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
[EL Info]: 2014-05-09 09:26:02.022--SessionBroker(5894789)--EclipseLink, version: Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5
[EL Info]: connection: 2014-05-09 09:26:02.631--ServerSession(14644967)--MyApp1Unit login successful
[EL Info]: connection: 2014-05-09 09:26:02.779--ServerSession(33125502)--MyApp2Unit login successful
[EL Info]: connection: 2014-05-09 09:26:06.366--SessionBroker(5894789)--file:/home/user/apache-tomcat-8.0.3/webapps/MyApp2/WEB-INF/lib/model-composite-0.0.1-SNAPSHOT.jar_compositeUnit login successful
09-May-2014 09:26:07.692 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error listenerStart
09-May-2014 09:26:07.693 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/MyApp2] startup failed due to previous errors
[EL Info]: connection: 2014-05-09 09:26:07.707--ServerSession(14644967)--MyApp1Unit logout successful
[EL Info]: connection: 2014-05-09 09:26:07.708--ServerSession(33125502)--MyApp2Unit logout successful
09-May-2014 09:26:07.715 SEVERE [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoader.clearReferencesJdbc The web application [/MyApp2] registered the JDBC driver [oracle.jdbc.driver.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
09-May-2014 09:26:08.277 INFO [main] org.apache.catalina.startup.Catalina.start

09-May-2014 09:26:07.719 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/user/apache-tomcat-8.0.3/webapps/host-manager
09-May-2014 09:26:07.772 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/user/apache-tomcat-8.0.3/webapps/manager
09-May-2014 09:26:07.797 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/user/apache-tomcat-8.0.3/webapps/examples
09-May-2014 09:26:08.233 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/user/apache-tomcat-8.0.3/webapps/ROOT
09-May-2014 09:26:08.250 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/user/apache-tomcat-8.0.3/webapps/docs
Server startup in 135339 ms

现在我想问你我该如何修复它?这也是管理两个 java webapp 部署的最佳方式吗,或者最好有两个 tomcat 实例,每个实例都有一个应用程序。

最佳答案

您不必拥有 2 个 tomcat 实例来运行 2 个应用程序。一个就够了。检查第二个应用程序在单独部署时是否工作。

还要确保您已正确设置应用程序的context-root。并检查日志是否部署了两个应用程序且没有任何错误。

您的第二个应用程序未部署。请参阅以下错误:

09-May-2014 09:26:07.692 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error listenerStart
09-May-2014 09:26:07.693 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/MyApp2] startup failed due to previous errors

如果你有<listener>在你的web.xml检查该监听器是否抛出任何异常以及您是否未处理它们。完整的异常将在 IDE 的控制台中可见。

来自你web.xml我可以看出问题出在听众的顺序上。

声明 ContextLoaderListener第一的。然后声明另一个紧随其后的听众。

来自servlet规范

8.2.3 Assembling the descriptor

The ordering will be based on the order in which they are defined in the descriptor and on the absolute-ordering element in the web.xml or an ordering element in the web-fragment.xml, if present.

a. Filters that match a request are chained in the order in which they are declared in the web.xml.

b. Servlets are initialized either lazily at request processing time or eagerly during deployment. In the latter case, they are initialized in the order indicated by their load-on-startup elements.

c. Prior to this release of the specification, context listeners were invoked in random order. As of Servlet 3.0, the listeners are invoked in the order in which they are declared in the web.xml as specified below:

i. Implementations of javax.servlet.ServletContextListener are 
invoked at their contextInitialized method in the order in which they
have been declared, and at their contextDestroyed method in reverse
order.Chapter 8 Annotations and pluggability 73

ii. Implementations of javax.servlet.ServletRequestListener are
invoked at their requestInitialized method in the order in which they
have been declared, and at their requestDestroyed method in reverse
order

iii. Implementations of javax.servlet.http.HttpSessionListener are
invoked at their sessionCreated method in the order in which they have
been declared, and at their sessionDestroyed method in reverse order.

关于java - Tomcat 中的多个 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com