一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - JDK8環境中使用struts2的步驟詳解

JDK8環境中使用struts2的步驟詳解

2021-06-14 14:08kongwenqiang Java教程

這篇文章主要給大家介紹了關于在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。

?
1
2
3
4
5
<dependency>
<groupid>org.apache.struts</groupid>
<artifactid>struts2-core</artifactid>
<version>2.3.35</version>
</dependency>

struts2里面依賴xwork-core

?
1
2
3
4
5
<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。
具體問題出在:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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官方提供的一個插件。具體用法如下:

在項目中加入依賴:

?
1
2
3
4
5
<dependency>
<groupid>org.apache.struts</groupid>
<artifactid>struts2-java8-support-plugin</artifactid>
<version>2.3.35</version>
</dependency>

排除asm依賴

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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替換的標簽,這個問題可以忽略了。

核心類攔截器變化

?
1
2
3
4
5
6
7
8
9
10
11
<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

我們項目使用的版本是:

?
1
2
3
4
5
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjweaver</artifactid>
<version>1.6.9</version>
</dependency>

升級jdk1.8以后,需要同時升級該jar的版本到1.8.13。

參考

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://leokongwq.github.io/2018/11/07/struts2-with-jdk8.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 香蕉在线精品一区二区 | 四虎永久在线精品国产 | 幸福草电视剧演员表介绍 | 欧美午夜视频一区二区三区 | 国产青青操| 国产午夜亚洲精品理论片不卡 | beeg日本高清xxxx18 | 日韩亚洲欧美理论片 | 波多野结衣两女调教 | 91国在线观看| 国内外精品免费视频 | 18捆绑调教在线高清 | 四虎在线观看 | 亚洲精品m在线观看 | 国产亚洲精品日韩香蕉网 | 成人在线观看视频免费 | 91手机看片国产永久免费 | 亚洲人成网站在线观看90影院 | 日日摸日日碰夜夜爽97纠 | 热九九精品 | 黑人巨大初黑人解禁作品 | 日韩成人免费aa在线看 | 日本熟hdx| 手机在线观看精品国产片 | 亚洲AV久久无码精品九号 | 亚洲精品国产成人7777 | 四虎免费影院在线播放 | 久久国产精品二区99 | 清纯漂亮女友初尝性过程 | 岛国在线播放v片免费 | 99国内精品久久久久久久黑人 | 国产美女久久久久 | 精新精新国产自在现 | 免费观看在线永久免费xx视频 | julia ann多人乱战 | 日本道色综合久久影院 | 日韩一区二区三区四区不卡 | 四虎免费影院ww4164h | 日本免费三片在线观看 | 国产一级精品高清一级毛片 | 我被黑人彻底征服的全文 |