0

我已经开发了一个基于 struts2.2.1 的 Web 应用程序,使用 Eclipse indigo IDE 和 apache-tomcat-7.0.28。为了让它在没有 IDE 的情况下工作,我在 Eclipse IDE 中使用:右键单击项目->导出->war。

所以,我得到了war文件,我可以让它在任何安装了apache-tomcat-7.0.28的windows服务器上工作,只需将war文件复制到tomcat的webapps文件夹并运行surver。在这里一切都很好。

但是,当我将这个相同的战争文件带到安装有相同 apache-tomcat-7.0.28 的 Linux 服务器时,它无法打开 web.xml 中指定的 jsp 文件并显示错误 404 页面。

我什至在不同的 linux 机器(如 Ubuntu)上尝试过,但它不工作,我得到同样的 404 错误。

为什么会这样?

更新:

它在日志文件夹和内部采用这种形式的catalina.out文件

Jul 17, 2012 9:35:55 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/ai]
Jul 17, 2012 9:36:55 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /usr/apache-tomcat-7.0.28/webapps/ai.war
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
Jul 17, 2012 9:36:56 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
log4j:WARN No appenders could be found for logger (com.opensymphony.xwork2.config.providers.XmlConfigurationProvider).
log4j:WARN Please initialize the log4j system properly.
Jul 17, 2012 9:36:56 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Jul 17, 2012 9:36:56 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/ai] startup failed due to previous errors
Jul 17, 2012 9:36:56 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/ai] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@626028]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@970110]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Jul 17, 2012 9:36:56 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/ai] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@1c6f1f4]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@36d036]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Jul 17, 2012 9:38:46 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/GeneTest
Jul 17, 2012 10:21:48 AM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/ai]
Jul 17, 2012 10:22:38 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /usr/apache-tomcat-7.0.28/webapps/ai.war
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
Jul 17, 2012 10:22:39 AM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
log4j:WARN No appenders could be found for logger (com.opensymphony.xwork2.config.providers.XmlConfigurationProvider).
log4j:WARN Please initialize the log4j system properly.
Jul 17, 2012 10:22:39 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Jul 17, 2012 10:22:39 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/ai] startup failed due to previous errors
Jul 17, 2012 10:22:39 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/ai] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@1c8e80d]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@fadb88]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Jul 17, 2012 10:22:39 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [/ai] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@162c87a]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@57f389]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ai</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

更新:将表单 struts2.2.1 升级到 struts2.3.4 后

Jul 18, 2012 10:38:20 AM org.apache.catalina.core.StandardServer await
INFO: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
Jul 18, 2012 10:38:20 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
Jul 18, 2012 10:38:20 AM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Jul 18, 2012 10:38:20 AM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Jul 18, 2012 10:38:20 AM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-8080"]
Jul 18, 2012 10:38:20 AM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]
Jul 18, 2012 10:38:20 AM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
Jul 18, 2012 10:38:20 AM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]
Jul 18, 2012 10:38:25 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib64/jvm/jdk1.6.0_22/jre/lib/i386/server:/usr/lib64/jvm/jdk1.6.0_22/jre/lib/i386:/usr/lib64/jvm/jdk1.6.0_22/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
Jul 18, 2012 10:38:25 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Jul 18, 2012 10:38:25 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Jul 18, 2012 10:38:25 AM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["ajp-bio-8009"]
java.net.BindException: Address already in use <null>:8009
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:406)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:423)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:974)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
Caused by: java.net.BindException: Address already in use
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
    at java.net.ServerSocket.bind(ServerSocket.java:319)
    at java.net.ServerSocket.<init>(ServerSocket.java:185)
    at java.net.ServerSocket.<init>(ServerSocket.java:141)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:393)
    ... 16 more
Jul 18, 2012 10:38:25 AM org.apache.catalina.core.StandardService initInternal
SEVERE: Failed to initialize connector [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[AJP/1.3-8009]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:976)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    ... 12 more
Caused by: java.net.BindException: Address already in use <null>:8009
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:406)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:423)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:974)
    ... 13 more
Caused by: java.net.BindException: Address already in use
    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
    at java.net.ServerSocket.bind(ServerSocket.java:319)
    at java.net.ServerSocket.<init>(ServerSocket.java:185)
    at java.net.ServerSocket.<init>(ServerSocket.java:141)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:393)
    ... 16 more
Jul 18, 2012 10:38:25 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 544 ms
Jul 18, 2012 10:38:25 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jul 18, 2012 10:38:25 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.28
Jul 18, 2012 10:38:25 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /usr/apache-tomcat-7.0.28/webapps/ai3.war
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Parsing configuration file [struts-default.xml]
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Parsing configuration file [struts-plugin.xml]
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Parsing configuration file [struts.xml]
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.ObjectFactory)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.FileManager)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.conversion.impl.XWorkConverter)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.TextProvider)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.ActionProxyFactory)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.conversion.ObjectTypeDeterminer)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (org.apache.struts2.dispatcher.mapper.ActionMapper)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (jakarta) for (org.apache.struts2.dispatcher.multipart.MultiPartRequest)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (org.apache.struts2.views.freemarker.FreemarkerManager)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (org.apache.struts2.components.UrlRenderer)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.validator.ActionValidatorManager)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.util.ValueStackFactory)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.util.reflection.ReflectionProvider)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.util.reflection.ReflectionContextFactory)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.util.PatternMatcher)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (org.apache.struts2.dispatcher.StaticContentLoader)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (com.opensymphony.xwork2.UnknownHandlerManager)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Choosing bean (struts) for (org.apache.struts2.views.util.UrlHelper)
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Overriding property struts.i18n.reload - old value: false new value: true
Jul 18, 2012 10:38:27 AM com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
INFO: Overriding property struts.configuration.xml.reload - old value: false new value: true
Jul 18, 2012 10:38:27 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Jul 18, 2012 10:38:27 AM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/ai3] startup failed due to previous errors
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/ROOT
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/docs
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/examples
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/host-manager
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/manager
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/apache-tomcat-7.0.28/webapps/GeneTest
Jul 18, 2012 10:38:27 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jul 18, 2012 10:38:27 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 2106 ms
4

1 回答 1

0

升级后此堆栈跟踪显示应用程序端口已在使用中意味着进程已在运行尝试为应用程序使用不同的端口。或

在升级之前:RUNTIME 类路径具有重复的 TLD,您必须检查以下路径到 appserver 的 /lib 文件夹或 JDK 的 /lib 文件夹,然后在 WAR 构建的 /WEB-INF/lib 文件夹中再次检查。如果 appservers/lib 或 JDK 的/lib 文件夹中已经存在 tld,请从 webapps/lib 文件夹中删除

于 2012-07-19T08:17:07.570 回答