怎么在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)圖如下。
最近將組內(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)