【问题标题】:struts2 tomcat 8 startupstruts2 tomcat 8 启动
【发布时间】:2017-09-08 23:40:31
【问题描述】:

我正在使用 tomcat 8.5.13 和 Struts 2.5.2 运行开发服务器。

我将 struts jar 升级到 2.5.10.1,现在部署战争时出现此错误:

2017-04-13 06:26:59.565|DEBUG|localhost-startStop-31|Creating revision for URL: jar:file:/usr/local/apache-tomcat-8.5.13/webapps/ROOT/WEB-INF/lib/struts2-core-2.5.10.1.jar!/struts-default.xml
2017-04-13 06:26:59.578|DEBUG|localhost-startStop-31|Loaded action configuration from: struts-default.xml
2017-04-13 06:26:59.578|DEBUG|localhost-startStop-31|Substituting value [                 java.lang.Object,                 java.lang.Runtime,                 java.lang.System,                 java.lang.Class,                 java.lang.ClassLoader,                 java.lang.Shutdown,                 java.lang.ProcessBuilder,                 ognl.OgnlContext,                 ognl.ClassResolver,                 ognl.TypeConverter,                 ognl.MemberAccess,                 ognl.DefaultMemberAccess,                 com.opensymphony.xwork2.ognl.SecurityMemberAccess,                 com.opensymphony.xwork2.ActionContext] using [com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor]
2017-04-13 06:26:59.578|DEBUG|localhost-startStop-31|Substituting value                  java.lang.Object,                 java.lang.Runtime,                 java.lang.System,                 java.lang.Class,                 java.lang.ClassLoader,                 java.lang.Shutdown,                 java.lang.ProcessBuilder,                 ognl.OgnlContext,                 ognl.ClassResolver,                 ognl.TypeConverter,                 ognl.MemberAccess,                 ognl.DefaultMemberAccess,                 com.opensymphony.xwork2.ognl.SecurityMemberAccess,                 com.opensymphony.xwork2.ActionContext with proper System variable or environment variable
2017-04-12 19:59:30.243|ERROR|localhost-startStop-29|Dispatcher initialization failed
    java.lang.NullPointerException: null
        at java.util.Hashtable.put(Hashtable.java:459) ~[?:1.8.0_101]
        at java.util.Properties.setProperty(Properties.java:166) ~[?:1.8.0_101]
        at org.apache.commons.lang3.text.StrLookup.copyProperties(StrLookup.java:73) ~[commons-lang3-3.4.jar:3.4]
        at org.apache.commons.lang3.text.StrLookup.systemPropertiesLookup(StrLookup.java:99) ~[commons-lang3-3.4.jar:3.4]
        at org.apache.commons.lang3.text.StrSubstitutor.replaceSystemProperties(StrSubstitutor.java:231) ~[commons-lang3-3.4.jar:3.4]
        at com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor.substitute(EnvsValueSubstitutor.java:39) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:282) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:98) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:906) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:445) ~[struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:486) [struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:75) [struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:63) [struts2-core-2.5.10.1.jar:2.5.10.1]
        at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) [catalina.jar:8.5.13]
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) [catalina.jar:8.5.13]
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) [catalina.jar:8.5.13]
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4590) [catalina.jar:8.5.13]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233) [catalina.jar:8.5.13]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.5.13]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) [catalina.jar:8.5.13]
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) [catalina.jar:8.5.13]
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) [catalina.jar:8.5.13]
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952) [catalina.jar:8.5.13]
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1823) [catalina.jar:8.5.13]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_101]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_101]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_101]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_101]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]

我认为这已经解决了,因为当我重新启动 Tomcat 时一切正常。但是,当我只是在不重新启动的情况下移动新的 WAR 时,有时(但不是每次)我仍然会收到此错误。每当我重新启动 Tomcat 时,过滤器都会正常启动。我的 struts.xml 中的常量是:

<constant name="struts.action.extension" value=",html" />
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
<constant name="struts.ui.theme" value="css_xhtml" />

这是 WEB-INF/lib 下库中的 JAR

activation-1.1.jar
aws-java-sdk-core-1.11.119.jar
aws-java-sdk-kms-1.11.119.jar
aws-java-sdk-s3-1.11.119.jar
c3p0-0.9.1.1.jar
commonj.sdo-2.1.1.jar
commons-beanutils-1.9.2.jar
commons-codec-1.9.jar
commons-collections-3.2.2.jar
commons-digester-1.8.1.jar
commons-fileupload-1.3.2.jar
commons-io-2.4.jar
commons-lang-2.6.jar
commons-lang3-3.4.jar
commons-logging-1.2.jar
commons-validator-1.6.jar
eclipselink-2.6.4.jar
freemarker-2.3.23.jar
hamcrest-core-1.1.jar
httpclient-4.5.3.jar
httpcore-4.4.6.jar
ion-java-1.0.2.jar
jackson-annotations-2.6.6.jar
jackson-core-2.6.6.jar
jackson-databind-2.6.6.jar
jackson-dataformat-cbor-2.6.6.jar
javassist-3.20.0-GA.jar
javax.json-1.0.4.jar
javax.persistence-2.1.1.jar
jaxwsapi-1.2.0.jar
jmespath-java-1.11.119.jar
joda-time-2.8.1.jar
json-simple-1.1.1.jar
junit-4.10.jar
log4j-1.2.16.jar
log4j-api-2.7.jar
log4j-core-2.7.jar
mail-1.4.7.jar
mysql-connector-java-6.0.6.jar
ognl-3.1.12.jar
org.osgi.core-4.2.0.jar
poi-3.13.jar
quartz-2.2.3.jar
slf4j-api-1.7.7.jar
struts2-core-2.5.10.1.jar
validation-api-1.1.0.Final.jar

【问题讨论】:

  • 在 struts.xml 文件中显示constants
  • 请提供添加到 lib 文件夹 Richard 中的文件
  • 常量和 lib jar 都已添加到问题中。提前感谢您对此提供的任何帮助。
  • @RichardH 您的系统属性有些问题。您是否删除/修改它们?尝试commons-lang3-3.5.jar,看看问题是否仍然存在。

标签: configuration struts2 migration tomcat8


【解决方案1】:

使用 Maven,或手动检查其他所需的和相关的库是否对齐。

Struts 2.5.10.1 使用与 Struts 2.5.2 不同的库版本。

你可以在official pom.xml on Github找到他们:

<struts2.springPlatformVersion>4.1.6.RELEASE</struts2.springPlatformVersion>
<ognl.version>3.1.12</ognl.version>
<asm.version>5.1</asm.version>
<tiles.version>3.0.7</tiles.version>
<tiles-request.version>1.0.6</tiles-request.version>
<log4j2.version>2.8</log4j2.version>

这些适用于当前版本,即 2.5.11-SNAPSHOT。

Browsing the History,你可以看到 2.5.10.1log4j 2.7 而不是 2.8,(和 commons-lang3 3.4 而不是 3.5,但只使用最新的)。

仔细调整库的版本,如果仍有问题,请返回并发布您正在使用的库的详细列表。

【讨论】:

    【解决方案2】:

    我仍然不确定到底发生了什么,但我重新启动了 Tomcat,现在一切正常。在此之前,我只是重新加载 WAR 文件。

    谢谢,

    理查德

    【讨论】:

      【解决方案3】:

      将这些 jars 版本用于带有 tomcat 8.5.16 的 struts 2.5.12 和 Eclipse 版本:Oxygen Release (4.7.0),它们工作得很好。

      • commons-fileupload-1.3.3.jar
      • commons-io-2.4.jar
      • commons-lang3-3.6.jar
      • freemarker-2.3.23.jar
      • javassist-3.20.0-GA.jar
      • log4j-api-2.8.2.jar
      • log4j-core-2.8.2.jar
      • ognl-3.1.12.jar
      • struts2-core-2.5.12.jar

      希望 jar 版本的这种对齐方式会有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-12-22
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        相关资源
        最近更新 更多