struts2.3升級到 struts2.5.13

log4j 1 升級到 log4j 2

1肩杈、刪除掉 log4j 1的配置文件群发。如 classpath 下面的 log4j.xml 或者 log4j.properties撞反。
2逛尚、新增 log4j2.xml 文件在 classpath 下。以下是最基本的配置搓谆。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <!-- all 為所有的都輸出 -->
        <Root level="all">
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
</Configuration>

我的生產(chǎn)配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>

        <RollingFile name="RollingFileInfo" fileName="${sys:catalina.home}/logs/web/info.log"
                     filePattern="${sys:catalina.home}/logs/web/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <!--設置只輸出級別為INFO的日志-->
                <ThresholdFilter level="INFO"/>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="${sys:catalina.home}/logs/web/warn.log"
                     filePattern="${sys:catalina.home}/logs/web/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <!--設置只輸出級別為WARN的日志-->
                <ThresholdFilter level="WARN"/>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${sys:catalina.home}/logs/web/error.log"
                     filePattern="${sys:catalina.home}/logs/web/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <!--設置只輸出級別為ERROR的日志-->
                <ThresholdFilter level="ERROR"/>
            </Filters>
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="20MB"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!--<logger name="org.springframework" level="INFO"/>-->
        <!--<logger name="org.hibernate" level="INFO"/>-->
        <Root level="info">

            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="RollingFileInfo"/>
            <AppenderRef ref="RollingFileWarn"/>
            <AppenderRef ref="RollingFileError"/>
        </Root>
    </Loggers>
</Configuration>

3炒辉、maven 配置

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.8.2</version>
</dependency>

去除xerces依賴

1、 移除對 xerces 的依賴包括 xerces泉手、xercesImpl黔寇、mlParserAPIs(重點)
2、 maven 移除以下配置(檢查 lib 中是否已經(jīng)移除掉了)

<dependency>
    <groupId>org.apache</groupId>
    <artifactId>xerces</artifactId>
    <version>2.5.0</version>
</dependency>
<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.10.0</version>
</dependency>

maven 工程斩萌,需要分析依賴(使用命令 mvn dependency:tree )是否存在傳遞的依賴的xerces
阻止依賴傳送門
注意:如果依賴的 jar 文件中還存在以上的 jar 會出現(xiàn)一個錯誤是說注解無法注入缝裤。據(jù)說是 JDK 默認攜帶了此類的實現(xiàn)。

小插曲:出現(xiàn)下面的問題的時候颊郎,真心奔潰憋飞。這個提示明顯是說annotation轉換出現(xiàn)異常∧房裕看了2.5.13的源碼榛做。org.apache.struts2.convention.annotation.Result.name()這個是一個數(shù)組,而在2.3里面確實一個string猾编,各種排查瘤睹。無果。重新build了工程答倡,也就是去掉了xerces這些依賴

java.lang.annotation.AnnotationTypeMismatchException: Incorrectly typed data found for annotation element public abstract java.lang.String[] org.apache.struts2.convention.annotation.Result.name() (Found data of type class java.lang.String[view])

Struts2 配置文件修改

struts2 的配置文件修改 dtd 頭部引用

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

web.xml修改

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>

遺留問題

如果系統(tǒng)中使用 struts struts.convention.action.includeJars來導入包的話(配置如下)轰传。會在tomcat6和7偶然出現(xiàn)在 classpath 找不到指定的 jar 文件。但是在最新版的 tomcat 8.5.23 是可以的瘪撇。但是最奇怪的是 build 多幾次就可以了 _

<constant name="struts.convention.action.includeJars" value=".*?/includeFile.*?jar(!/)?" />

后面要研究一下這個掃包的邏輯

更新20171126

經(jīng)過發(fā)現(xiàn) struts.convention.action.includeJarsjar 文件沒有META-INF文件夾获茬。正確的jar 文件目錄是

*.jar
|--META-INF
|--com
    |--youpackage

而在 lib 下面的卻沒有 META-INF
使用 命令mvn clean install 打包的時候看了輸出的目錄的 jar 所有東西都有倔既。然后在本地的 repositories 里面的 jar 也沒有問題恕曲。

image

后來發(fā)現(xiàn)原來是這個鍋是 IDEA 的。系統(tǒng)分為4個工程渤涌。依賴如下

d工程(web)
|--src
|--WebRoot
    |--WEB-INF
        |--lib
            |--a工程.jar
            |--b工程.jar
            |--c工程.jar
        |--classes 

如果在 IDEA 中導入 d工程佩谣。然后再導入 其他三個工程。啟動 tomcat 的時候 IDEA 會自動編譯一下其他的三個工程实蓬。把其他三個工程的 jar 文件打包到 lib 下面茸俭。打包的時候就出現(xiàn)沒有 jar 文件 META-INF這個目錄吊履。最奇怪的第二次啟動就可以了_

備注

  1. 實驗過 jar 文件中必須有META-INF這層目錄(里面可以沒有描述文件)调鬓。沒有的話跳過此包不掃描艇炎。(猜想:估計在 tomcat6、7 掃描的時候沒有此目錄的話可能會被認為是普通的壓縮文件腾窝。不需要裝載到系統(tǒng)中去缀踪。tomcat8是支持沒有META-INF的) 。有興趣的可以去官網(wǎng)看卡 傳送門虹脯。另外發(fā)現(xiàn)IBM 一篇干貨 link

文章出自 http://lsof.fun

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驴娃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子归形,更是在濱河造成了極大的恐慌托慨,老刑警劉巖鼻由,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暇榴,死亡現(xiàn)場離奇詭異,居然都是意外死亡蕉世,警方通過查閱死者的電腦和手機蔼紧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狠轻,“玉大人奸例,你說我怎么就攤上這事∠蚵ィ” “怎么了查吊?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湖蜕。 經(jīng)常有香客問我逻卖,道長,這世上最難降的妖魔是什么昭抒? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任评也,我火速辦了婚禮,結果婚禮上灭返,老公的妹妹穿的比我還像新娘盗迟。我一直安慰自己,他們只是感情好熙含,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布罚缕。 她就那樣靜靜地躺著,像睡著了一般怎静。 火紅的嫁衣襯著肌膚如雪邮弹。 梳的紋絲不亂的頭發(fā)上喂饥,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音肠鲫,去河邊找鬼员帮。 笑死,一個胖子當著我的面吹牛导饲,可吹牛的內(nèi)容都是我干的捞高。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼渣锦,長吁一口氣:“原來是場噩夢啊……” “哼硝岗!你這毒婦竟也來了?” 一聲冷哼從身側響起袋毙,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤型檀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后听盖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胀溺,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年皆看,在試婚紗的時候發(fā)現(xiàn)自己被綠了仓坞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡腰吟,死狀恐怖无埃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毛雇,我是刑警寧澤嫉称,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站灵疮,受9級特大地震影響织阅,放射性物質發(fā)生泄漏。R本人自食惡果不足惜始藕,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蒲稳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伍派,春花似錦江耀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春舌稀,著一層夾襖步出監(jiān)牢的瞬間啊犬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工壁查, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留觉至,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓睡腿,卻偏偏與公主長得像语御,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子席怪,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345