怎么在JDK8環(huán)境中使用struts2?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了石家莊免費(fèi)建站歡迎大家使用!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。
org.apache.struts struts2-core 2.3.35
Struts2里面依賴xwork-core
org.apache.struts.xwork xwork-core 2.3.35
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)目中加入依賴:
org.apache.struts struts2-java8-support-plugin 2.3.35
排除ASM依賴
org.apache.struts.xwork xwork-core asm asm asm asm-commons
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)題可以忽略了。
核心類攔截器變化
struts2 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter struts2 /*
aspectjweaver
我們項(xiàng)目使用的版本是:
org.aspectj aspectjweaver 1.6.9
看完上述內(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)的支持。