怎么在JDK8環(huán)境中使用struts2?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供古田企業(yè)網(wǎng)站建設,專注與網(wǎng)站建設、網(wǎng)站設計、H5開發(fā)、小程序制作等業(yè)務。10年已為古田眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。
Struts是Apache基金組織中Jakarta項目組的一個開源(Open Source)項目,主要就是實現(xiàn)了MVC設計模式,在Struts中有自己的控制器(ActionServlet),同時也提供了各種常用的頁面標簽庫以減少JSP頁面中的Scriptlet代碼,Struts實際上就屬于在傳統(tǒng)技術上發(fā)展起來的一種新的應用模式,其操作的本質(zhì)依然還是JSP、Servlet、JavaBean等技術的應用,Struts的體系結構圖如下。
最近將組內(nèi)項目的部署環(huán)境進行了一次升級。將JDK1.7S升級為1.8,Resin替換為Tomcat。在升級替換的過程中遇到了一些問題。特記錄再次,希望能幫助有同樣需求的朋友。
Struts2 和 JDK8
項目中使用的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-*
問題來了!
低版本的ASM不能在JDK1.8環(huán)境中使用。如果強行使用,會導致一些奇怪的問題。
例如:
只有一部分Action類可以正常被Struts2加載并處理http請求。某些在JDK1.7環(huán)境下可以正常工作的Action不能在JDK1.8下使用。原來可以訪問的接口,現(xiàn)在是404。
具體問題出在:
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); } }
這部分代碼就因為使用了低版本的ASM導致類解析失敗(IndexOutOfBoundsException)。
解決辦法一
最簡單方便的解決版本就是升級Struts2的版本到2.5.x。新版本將xwork依賴直接合并到struts2-core中了。而且使用了ASM 5.X版本,支持JDK8。
解決辦法二
使用Struts2官方提供的一個插件。具體用法如下:
在項目中加入依賴:
org.apache.struts struts2-java8-support-plugin 2.3.35
排除ASM依賴
org.apache.struts.xwork xwork-core asm asm asm asm-commons
Struts2 版本升級問題
標簽庫不兼容
眾所周知,Struts2框架的安全問題很多,建議升級到最新版本2.5.x。
但是2.5.x版本的Struts2提供的標簽庫和低版本的不兼容。這就會導致原有的JSP頁面不能正常渲染。
當然了,如果你的項目里面沒有使用Struts2替換的標簽,這個問題可以忽略了。
核心類攔截器變化
struts2 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter struts2 /*
aspectjweaver
我們項目使用的版本是:
org.aspectj aspectjweaver 1.6.9
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。