欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JDK8環(huán)境中使用struts2的步驟詳解

 更新時(shí)間:2018年11月13日 11:29:56   作者:kongwenqiang  
這篇文章主要給大家介紹了關(guān)于在JDK8環(huán)境中使用struts2的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

背景

Struts是Apache基金組織中Jakarta項(xiàng)目組的一個(gè)開源(Open Source)項(xiàng)目,主要就是實(shí)現(xiàn)了MVC設(shè)計(jì)模式,在Struts中有自己的控制器(ActionServlet),同時(shí)也提供了各種常用的頁(yè)面標(biāo)簽庫(kù)以減少JSP頁(yè)面中的Scriptlet代碼,Struts實(shí)際上就屬于在傳統(tǒng)技術(shù)上發(fā)展起來(lái)的一種新的應(yīng)用模式,其操作的本質(zhì)依然還是JSP、Servlet、JavaBean等技術(shù)的應(yīng)用,Struts的體系結(jié)構(gòu)圖如下。

最近將組內(nèi)項(xiàng)目的部署環(huán)境進(jìn)行了一次升級(jí)。將JDK1.7S升級(jí)為1.8,Resin替換為Tomcat。在升級(jí)替換的過(guò)程中遇到了一些問(wèn)題。特記錄再次,希望能幫助有同樣需求的朋友。

Struts2 和 JDK8

項(xiàng)目中使用的Struts2版本是2.3.35。

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.35</version>
</dependency>

Struts2里面依賴xwork-core

<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.35</version>
</dependency>

xwork-core依賴asm-*

問(wèn)題來(lái)了!

低版本的ASM不能在JDK1.8環(huán)境中使用。如果強(qiáng)行使用,會(huì)導(dǎo)致一些奇怪的問(wèn)題。

例如:

只有一部分Action類可以正常被Struts2加載并處理http請(qǐng)求。某些在JDK1.7環(huán)境下可以正常工作的Action不能在JDK1.8下使用。原來(lái)可以訪問(wèn)的接口,現(xiàn)在是404。
具體問(wèn)題出在:

private void readClassDef(String className) {
if (!className.endsWith(".class")) {
className = className.replace('.', '/') + ".class";
}
try {
URL resource = classLoaderInterface.getResource(className);
if (resource != null) {
InputStream in = resource.openStream();
try {
ClassReader classReader = new ClassReader(in);
classReader.accept(new InfoBuildingVisitor(this), ClassReader.SKIP_DEBUG);
} finally {
in.close();
}
} else {
throw new XWorkException("Could not load " + className);
}
} catch (IOException e) {
throw new XWorkException("Could not load " + className, e);
}
}

這部分代碼就因?yàn)槭褂昧说桶姹镜腁SM導(dǎo)致類解析失敗(IndexOutOfBoundsException)。

解決辦法一

最簡(jiǎn)單方便的解決版本就是升級(jí)Struts2的版本到2.5.x。新版本將xwork依賴直接合并到struts2-core中了。而且使用了ASM 5.X版本,支持JDK8。

解決辦法二

使用Struts2官方提供的一個(gè)插件。具體用法如下:

在項(xiàng)目中加入依賴:

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-java8-support-plugin</artifactId>
<version>2.3.35</version>
</dependency>

排除ASM依賴

<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<exclusions>
<exclusion>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
</exclusion>
<exclusion>
<groupId>asm</groupId>
<artifactId>asm-commons</artifactId>
</exclusion>
</exclusions>
</dependency>

Struts2 版本升級(jí)問(wèn)題

標(biāo)簽庫(kù)不兼容

眾所周知,Struts2框架的安全問(wèn)題很多,建議升級(jí)到最新版本2.5.x。

但是2.5.x版本的Struts2提供的標(biāo)簽庫(kù)和低版本的不兼容。這就會(huì)導(dǎo)致原有的JSP頁(yè)面不能正常渲染。

當(dāng)然了,如果你的項(xiàng)目里面沒(méi)有使用Struts2替換的標(biāo)簽,這個(gè)問(wèn)題可以忽略了。

核心類攔截器變化

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
之前的核心過(guò)濾器全類名會(huì)有個(gè)ng ,struts2.5核心過(guò)濾器沒(méi)有這個(gè)
-->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

aspectjweaver

我們項(xiàng)目使用的版本是:

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>

升級(jí)JDK1.8以后,需要同時(shí)升級(jí)該jar的版本到1.8.13。

參考

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • AJAX?SpringBoot?前后端數(shù)據(jù)交互的項(xiàng)目實(shí)現(xiàn)

    AJAX?SpringBoot?前后端數(shù)據(jù)交互的項(xiàng)目實(shí)現(xiàn)

    本文主要介紹了AJAX?SpringBoot?前后端數(shù)據(jù)交互的項(xiàng)目實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • JDK基于CAS實(shí)現(xiàn)原子類盤點(diǎn)解析

    JDK基于CAS實(shí)現(xiàn)原子類盤點(diǎn)解析

    這篇文章主要為大家介紹了JDK基于CAS實(shí)現(xiàn)原子類盤點(diǎn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Java中集合LinkedList的原理與使用方法

    Java中集合LinkedList的原理與使用方法

    這篇文章主要給大家介紹了關(guān)于Java中集合LinkedList的原理與使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • IDEA引MAVEN項(xiàng)目jar包依賴導(dǎo)入問(wèn)題解決方法

    IDEA引MAVEN項(xiàng)目jar包依賴導(dǎo)入問(wèn)題解決方法

    這篇文章主要介紹了IDEA引MAVEN項(xiàng)目jar包依賴導(dǎo)入問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • springboot中不能獲取post請(qǐng)求參數(shù)的解決方法

    springboot中不能獲取post請(qǐng)求參數(shù)的解決方法

    這篇文章主要介紹了springboot中不能獲取post請(qǐng)求參數(shù)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 輕松掌握J(rèn)ava注解,讓編程更智能、更優(yōu)雅

    輕松掌握J(rèn)ava注解,讓編程更智能、更優(yōu)雅

    輕松掌握J(rèn)ava注解?沒(méi)問(wèn)題!想要讓你的Java代碼更具可讀性、維護(hù)性,同時(shí)提升開發(fā)效率?本指南將帶你快速入門Java注解的世界,只需短短幾分鐘,你就能揭秘這個(gè)強(qiáng)大的編程工具,讓編寫有聲明性邏輯的代碼變得輕而易舉,趕快一起來(lái)探索吧!
    2024-01-01
  • JAVA獲取特定格式時(shí)間方式

    JAVA獲取特定格式時(shí)間方式

    我們有時(shí)要獲取時(shí)間,年月日時(shí)分秒周幾,有時(shí)要以特定的格式出現(xiàn),本文主要介紹了JAVA獲取特定格式時(shí)間方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • java基于jcifs.smb實(shí)現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器

    java基于jcifs.smb實(shí)現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器

    這篇文章主要介紹了java基于jcifs.smb實(shí)現(xiàn)遠(yuǎn)程發(fā)送文件到服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java詞法分析器DDL遞歸應(yīng)用詳解

    java詞法分析器DDL遞歸應(yīng)用詳解

    這篇文章主要介紹了java詞法分析器DDL遞歸應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍

    關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍

    這篇文章主要介紹了關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍,基本類型,或者叫做內(nèi)置類型,是JAVA中不同于類的特殊類型,它們是我們編程中使用最頻繁的類型,需要的朋友可以參考下
    2023-07-07

最新評(píng)論