怎么在JDK8環(huán)境中使用struts2

怎么在JDK8環(huán)境中使用struts2?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供古田企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為古田眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。

Struts是Apache基金組織中Jakarta項(xiàng)目組的一個(gè)開(kāi)源(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)圖如下。

怎么在JDK8環(huán)境中使用struts2

最近將組內(nèi)項(xiàng)目的部署環(huán)境進(jìn)行了一次升級(jí)。將JDK1.7S升級(jí)為1.8,Resin替換為T(mén)omcat。在升級(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里面依賴(lài)xwork-core

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

xwork-core依賴(lài)asm-*

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

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

例如:

只有一部分Action類(lèi)可以正常被Struts2加載并處理http請(qǐng)求。某些在JDK1.7環(huán)境下可以正常工作的Action不能在JDK1.8下使用。原來(lái)可以訪(fǎng)問(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)致類(lèi)解析失敗(IndexOutOfBoundsException)。

解決辦法一

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

解決辦法二

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

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

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

排除ASM依賴(lài)

<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)題可以忽略了。

核心類(lèi)攔截器變化

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
之前的核心過(guò)濾器全類(lèi)名會(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>

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

本文標(biāo)題:怎么在JDK8環(huán)境中使用struts2
當(dāng)前鏈接:http://bm7419.com/article18/pcgjdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、電子商務(wù)、品牌網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化