查看: 2284|回復: 0

[Java代碼] struts2 如何升級?以及常見的錯誤信息

3萬

主題

3萬

帖子

10萬

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
100197
發表于 2016-12-29 11:24:22
我前幾天剛做的2.3.1.2升級到2.3.15.1GA
如果你的應用沒有修改過struts2的源碼,那升級很簡單
增加3個jar
struts2一個,xwork一個,把原版本的替換掉,另外增加一個common-lang3的包
其他什么都不用動。

web.xml struts.xml沒有變化,只是15版本里增加了一些debug信息,如果你不想看,就把struts.xml里devmode改成false升級常見的錯誤信息:java.lang.NoSuchFieldError: VERSION_2_3_0 報錯解決方案
  1. java.lang.NoSuchFieldError: VERSION_2_3_0
  2.     at org.apache.struts2.views.freemarker.FreemarkerManager.createConfiguration(FreemarkerManager.java:331)
  3.     at org.apache.struts2.views.freemarker.FreemarkerManager.init(FreemarkerManager.java:282)
  4.     at org.apache.struts2.views.freemarker.FreemarkerManager.getConfiguration(FreemarkerManager.java:269)
  5.     at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.init(DefaultDispatcherErrorHandler.java:47)
  6.     at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:488)
  7.     at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
  8.     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
  9.     at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
  10.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
  11.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
  12.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4746)
  13.     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5399)
  14.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  15.     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
  16.     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  17.     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
  18.     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
  19.     at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1672)
  20.     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
  21.     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  22.     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  23.     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  24.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  25.     at java.lang.Thread.run(Thread.java:619)
復制代碼

        對舊版進行升級,這個項目不是maven項目,要把jar包一個一個替換,但是不是簡單換了jar包就行了,有些舊版特性新版不        一定支持,新版兼容到的舊系統其他jar不一定支持,所以升級也是一個技術活啊。。。簡單解決一個百度上好像都沒人討論        過的一個版本問題,這個版本問題的解決方案是要替換freemarker的包到freemarker-2.3.23.jar,也就是最高版本,同時        也提醒自己遇到問題一定不要慌,要根據出錯提示分步進行解決.技術上的問題都是有辦法解決的,要安靜的思考一下解決方案.
struts2更新版本操作有關事項備注
struts2更新版本操作有關事項備注,
更新主要jar包:struts2-convention-plugin-version,struts2-core-version, struts2-spring-plugin-version  
依賴jar包:xwork-core-version
報錯應更新有關jar包: freemarker-verson,log4j-version
mevan實例:

  1. <!-- struts2 所有jar包 -->
  2.         <dependency>
  3.             <groupId>org.apache.struts</groupId>
  4.             <artifactId>struts2-core</artifactId>
  5.             <!--<version>2.2.1</version>-->
  6.             <version>2.3.24.1</version>
  7.             <exclusions>
  8.                 <exclusion>
  9.                     <groupId>com.sun</groupId>
  10.                     <artifactId>tools</artifactId>
  11.                 </exclusion>
  12.             </exclusions>
  13.         </dependency>
  14.         <dependency>
  15.             <groupId>org.apache.struts</groupId>
  16.             <artifactId>struts2-spring-plugin</artifactId>
  17.             <!--<version>2.2.1</version>-->
  18.             <version>2.3.24.1</version>
  19.         </dependency>
  20.         <dependency>
  21.             <groupId>org.apache.struts</groupId>
  22.             <artifactId>struts2-convention-plugin</artifactId>
  23.             <!--<version>2.2.1</version>-->
  24.             <version>2.3.24.1</version>
  25.         </dependency>
  26.         <dependency>
  27.             <groupId>org.freemarker</groupId>
  28.             <artifactId>freemarker</artifactId>
  29.             <version>2.3.23</version>
  30.         </dependency>

  31.         <dependency>
  32.             <groupId>log4j</groupId>
  33.             <artifactId>log4j</artifactId>
  34.             <version>1.2.17</version>

  35.           </dependency>
復制代碼

xwork-core-version此包不更新涉及報錯:
  1. <filter>
  2.        <filter-name>StrutsPrepareFilter</filter-name>
  3.        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
  4.     </filter>
  5.     <filter>
  6.        <filter-name>StrutsExecuteFilter</filter-name>
  7.        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
  8.     </filter>
復制代碼


此配置文件 類丟失錯誤
freemarker-verson,log4j-version 包不更新涉及報錯:
  1. java.lang.NoSuchFieldError: VERSION_2_3_0
  2.     at org.apache.struts2.views.freemarker.FreemarkerManager.createConfiguration(FreemarkerManager.java:331)
  3.     at org.apache.struts2.views.freemarker.FreemarkerManager.init(FreemarkerManager.java:282)
  4.     at org.apache.struts2.views.freemarker.FreemarkerManager.getConfiguration(FreemarkerManager.java:269)
  5.     at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.init(DefaultDispatcherErrorHandler.java:47)
  6.     at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:488)
  7.     at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
  8.     at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
  9.     at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
  10.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
  11.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
  12.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4746)
  13.     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5399)
  14.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  15.     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
  16.     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  17.     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
  18.     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
  19.     at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1672)
  20.     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
  21.     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  22.     at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  23.     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  24.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  25.     at java.lang.Thread.run(Thread.java:619)
復制代碼
編輯推薦:FilterDispatcher已被標注為過時解決辦法is deprecated!


回復

使用道具 舉報