记录一次springmvc项目spring5升级spring6走过的抗

打印 上一主题 下一主题

主题 958|帖子 958|积分 2874

由于原摆设在阿里云上的基于spring4的springmvc项目,阿里云提示Spring Framework 特定条件下目录遍历弊端,要求spring的版本不低于spring5.3.39版本,于是将目前项目中的spring4.16版本升级到了spirng5.3.39版本,这也是spring5.0的最高版本了。背面想着既然spring6都已经出来好几年了,干脆一口气把他升级到spring6.0以上版本得了,于是选择了将spring5.3.39版本升级到spring6.1.12版本,这次升级要比spirng4升级到spring5问题多不少,现在把重要遇到的问题记录起来,算是升级的一个总结。
1 第一个问题,由于spring4版本的项目是用的eclipse开辟,升级到spring5版本后,想着放个开辟环境,于是升级过程是在idea2020版本过程上举行的,一切还算胜利。但在接下来spring5升级到spring6的过程中,由于spring6必要jdk17以及以上版本才支持,于是卸载原来利用了N多年的jdk8,安装上了jdk17,于是出现了第一个问题,idea2020版本不支持jdk17,然后重新下载idea2024版本,问题解决。
2 第二个问题,jdk升级到1.7以后,由于放弃了一些jdk8以下版本的方法,导致项目中部分代码包引用错误,编译不通过,于是找到编译报错的项目类文件,挨个解决。
3 第四个问题,spring5升级到spring6后,Controller层面的代码全面爆红,编译不通过,原因是HttpServletRequest原型来自于javax.servlet.http包,升级到spring6以后,java.servlet被抛弃,继续者是jakarta.servlet,于是修改pom.xml文件,增加如下依靠,这个时候必要修改所以原先引用import javax.servlet.批量更改成为import jakarta.servlet,编译爆红的问题得到解决
  1. <dependency>
  2.   <groupId>jakarta.servlet</groupId>
  3.   <artifactId>jakarta.servlet-api</artifactId>
  4.   <version>6.0.0</version>
  5.   <scope>provided</scope>
  6. </dependency>
复制代码
修改完后,重新启动服务器,启动过程发现一个希奇的问题,说是找不到
javax.servlet. ServletRequestListener类,由于web.xml文件中配置的监听器已经利用
jakarta. servlet. ServletRequestListener了,不应该在去找老版本的监听器啊,搞了半天,竟然是idea的问题,在maven中次举行clean,问题就解决了。

4 第三个问题,解决完系统重代码的编译错误后,开始启动tomcat服务器,发现启动的过程中遇到的第一错误,Caused by: java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不正当的相对排序。有关详细信息,请参阅Servlet规范的第8.2.2 2c节。
解决方法,在web.xml文件中增加<absolute-ordering/>


5 在次启动tomcat服务器,还是报错,这次的错误大致是不能加载org.hibernate.dialect.MySQL5InnoDBDialect,原来spring6升级后,hibernate也必要升级到hibernate6,hibernate6不在支持MySQL5InnoDBDialect方言,修改修改为hibernate.dialect=org.hibernate.dialect.MySQL8Dialect,问题得到解决。但是在把hibernate5升级到hibernate6以后,dao层的许多代码开始报错,编译不通过,所先是
import org.hibernate.Query;
不在支持,必要将import org.hibernate.Query修改为import org.hibernate.query.Query;
其次原来的this.getCurrentSession().createSQLQuery(sql)方法必要修改为
  1. this.getCurrentSession().createNativeQuery(sql)方法
  2. 然后将import javax.persistence.*;修改为import jakarta.persistence.*;
复制代码
反正dao层的代码和entity层的包引用必要修改。
6 在修改了上面提到的问题,以及一些没有提到的小问题后,服务器终于起来了,登入系统后,发现背景数据流程从Controller到service在到dao层的数据流转是正常的。但是jsp页面展示数据的时候出错了,打开index.jsp一看,如下两行代码编译不通过,原因是找不到对应的ctl文件。
  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  2. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
复制代码
解决办法,pom.xml文件中加入如下依靠
  1. <dependency>
  2.     <groupId>jakarta.servlet.jsp.jstl</groupId>
  3.     <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
  4.     <version>3.0.0</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.glassfish.web</groupId>
  8.     <artifactId>jakarta.servlet.jsp.jstl</artifactId>
  9.     <version>3.0.1</version>
  10. </dependency>
复制代码

终于登入到了系统首页,但是背面点击相干功能子页面,还是会报错。
7 进入系统首页后,点击相干功能子页面,开始报错,
java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.at
解决办法如下
刚开始以为是代码错误,这是由于利用Spring 6.0以上版本的问题,假如不想降版本,在项目pom文件build节点添加如下代码:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
           <source>17</source>
           <target>17</target>
           <encoding>UTF-8</encoding>
           <!-- 启用 -parameters 编译器标志 -->
           <compilerArgument>-parameters</compilerArgument>
        </configuration>
    </plugin>
8 上传文件失败
spring6不在支持
  1. org.springframework.web.multipart.commons.CommonsMultipartResolver文件解析类,甚至直接删除掉了commons包,因此需要重新配置文件解析类org.springframework.web.multipart.support.StandardServletMultipartResolver
复制代码

同时web.xml中添加
  1. <multipart-config>
  2.   <max-file-size>20480000</max-file-size>
  3.   <max-request-size>10485760</max-request-size>
  4.   <file-size-threshold>0</file-size-threshold>
  5. </multipart-config>
复制代码

到此,系统终于可以大概正常访问。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表