- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发两个 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/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!