中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在JDK8環境中使用struts2

發布時間:2021-03-25 17:46:15 來源:億速云 閱讀:202 作者:Leah 欄目:編程語言

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

Struts是Apache基金組織中Jakarta項目組的一個開源(Open Source)項目,主要就是實現了MVC設計模式,在Struts中有自己的控制器(ActionServlet),同時也提供了各種常用的頁面標簽庫以減少JSP頁面中的Scriptlet代碼,Struts實際上就屬于在傳統技術上發展起來的一種新的應用模式,其操作的本質依然還是JSP、Servlet、JavaBean等技術的應用,Struts的體系結構圖如下。

怎么在JDK8環境中使用struts2

最近將組內項目的部署環境進行了一次升級。將JDK1.7S升級為1.8,Resin替換為Tomcat。在升級替換的過程中遇到了一些問題。特記錄再次,希望能幫助有同樣需求的朋友。

Struts2 和 JDK8

項目中使用的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-*

問題來了!

低版本的ASM不能在JDK1.8環境中使用。如果強行使用,會導致一些奇怪的問題。

例如:

只有一部分Action類可以正常被Struts2加載并處理http請求。某些在JDK1.7環境下可以正常工作的Action不能在JDK1.8下使用。原來可以訪問的接口,現在是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官方提供的一個插件。具體用法如下:

在項目中加入依賴:

<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 版本升級問題

標簽庫不兼容

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

但是2.5.x版本的Struts2提供的標簽庫和低版本的不兼容。這就會導致原有的JSP頁面不能正常渲染。

當然了,如果你的項目里面沒有使用Struts2替換的標簽,這個問題可以忽略了。

核心類攔截器變化

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 
之前的核心過濾器全類名會有個ng ,struts2.5核心過濾器沒有這個
-->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

aspectjweaver

我們項目使用的版本是:

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景泰县| 洛扎县| 安陆市| 锦屏县| 锡林郭勒盟| 色达县| 浠水县| 句容市| 巴林右旗| 肇东市| 广河县| 靖安县| 陵川县| 三穗县| 望奎县| 随州市| 太仆寺旗| 玉门市| 牙克石市| 武川县| 黎川县| 潜江市| 那曲县| 锦屏县| 敦煌市| 广南县| 大化| 平罗县| 贵南县| 镇原县| 泌阳县| 寿光市| 樟树市| 时尚| 榕江县| 博爱县| 乡宁县| 商洛市| 钟山县| 栾城县| 瑞昌市|