怎么在JDK8环境中使用struts2?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了石家庄免费建站欢迎大家使用!Struts是Apache基金组织中Jakarta项目组的一个开源(Open Source)项目,主要就是实现了MVC设计模式,在Struts中有自己的控制器(ActionServlet),同时也提供了各种常用的页面标签库以减少JSP页面中的Scriptlet代码,Struts实际上就属于在传统技术上发展起来的一种新的应用模式,其操作的本质依然还是JSP、Servlet、JavaBean等技术的应用,Struts的体系结构图如下。
最近将组内项目的部署环境进行了一次升级。将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环境中使用。如果强行使用,会导致一些奇怪的问题。
例如:
只有一部分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官方提供的一个插件。具体用法如下:
在项目中加入依赖:
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
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。