找到多个名为[spring_web]的片段、TldScanner.scanJars至少有一个JAR被扫描 ...

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

一、报错IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序

        在运行 SpringMVC项目的时候,出现了报错 IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序,具体如下:
   Caused by: java.lang.IllegalArgumentException: 找到多个名为[spring_web]的片段。这是不合法的相对排序。有关具体信息,请参阅Servlet规范的第8.2.2 2c节。思量使用绝对排序。
        at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2275)
        at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2231)
        at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1252)
        at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:961)
        at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:290)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4352)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
        ... 37 more
           这里出现这个标题的原因,是由于在pom.xml 中切换了 SpringMVC的版本,而在切换之前已经在项目布局里将扩展包文件导入到了 web 中,而切换之后 artifacts 下目次 WEB-INF\lib 中的扩展包并不会主动删除,从而导致目次中存在多个版本的  SpringMVC jar 包,从而引发了这个错误。
        所以办理的办法就是把 WEB-INF\lib 中的包扫除一下,重新导入一个包到 lib中。记住需要重新导入,不能光把目次扫除就完事。而且删除这些 jar包需要停一下 tomcat 服务器,不然文件在使用中无法删除。
二、org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包罗TLD。

        这个标题真的搞得很烦,org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包罗TLD。 Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65。
        试了N多种情况,仍不能确定是哪里的标题,网上的很多答复和办理方法都并不能完全恰当,大概导致这种标题的原因有很多种。包括 MAVEN包的标题特别是 spring-webmvc 和 servlet-api 等这些依赖的版本标题、还有扩展导入 web 目次、JDK版本等,最后我 整理一个SpringMVC项目运行起来的完整配置和代码示例步伐。在这里也做个记录,以便以后有标题来排查。
#.  一个SpringMVC项目运行起来的完整配置和代码示例步伐

        先说一下情况,我这里是 IDEA 2024.1.6版本,JDK是IDEA中安装好的21版本,Maven也是IDEA中的3版本。项目目次截图如下:

1. 接下来是 pom.xml 文件代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <groupId>org.example</groupId>
  7.     <artifactId>springmvc01</artifactId>
  8.     <version>1.0-SNAPSHOT</version>
  9.     <properties>
  10.         <maven.compiler.source>21</maven.compiler.source>
  11.         <maven.compiler.target>21</maven.compiler.target>
  12.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13.     </properties>
  14.     <dependencies>
  15.         <dependency>
  16.             <groupId>junit</groupId>
  17.             <artifactId>junit</artifactId>
  18.             <version>4.13</version>
  19.         </dependency>
  20.         <dependency>
  21.             <groupId>org.springframework</groupId>
  22.             <artifactId>spring-webmvc</artifactId>
  23.             <version>5.3.39</version>
  24.         </dependency>
  25.         <dependency>
  26.             <groupId>javax.servlet</groupId>
  27.             <artifactId>servlet-api</artifactId>
  28.             <version>2.5</version>
  29.         </dependency>
  30.         <dependency>
  31.             <groupId>javax.servlet.jsp</groupId>
  32.             <artifactId>jsp-api</artifactId>
  33.             <version>2.2</version>
  34.         </dependency>
  35.         <dependency>
  36.             <groupId>javax.servlet</groupId>
  37.             <artifactId>jstl</artifactId>
  38.             <version>1.2</version>
  39.         </dependency>
  40.     </dependencies>
  41.     <build>
  42.         <!--maven静态资源过滤-->
  43.         <resources>
  44.             <resource>
  45.                 <directory>src/main/java</directory>
  46.                 <includes>
  47.                     <include>**/*.properties</include>
  48.                     <include>**/*.xml</include>
  49.                 </includes>
  50.                 <filtering>false</filtering>
  51.             </resource>
  52.             <resource>
  53.                 <directory>src/main/resources</directory>
  54.                 <includes>
  55.                     <include>**/*.properties</include>
  56.                     <include>**/*.xml</include>
  57.                 </includes>
  58.                 <filtering>false</filtering>
  59.             </resource>
  60.         </resources>
  61.     </build>
  62. </project>
复制代码
2. web.xml配置文件内容

        这些文件包括下面的 springmvc-servlet.xml 并没有什么特殊的,其实现在在IDEA中直接编辑也能写出来,不外放这里保存,以后有需要也可以直接复制。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5.          version="4.0">
  6.     <servlet>
  7.         <servlet-name>springmvc</servlet-name>
  8.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  9.         <init-param>
  10.             <param-name>contextConfigLocation</param-name>
  11.             <param-value>classpath:springmvc-servlet.xml</param-value>
  12.         </init-param>
  13.     </servlet>
  14.     <servlet-mapping>
  15.         <servlet-name>springmvc</servlet-name>
  16.         <url-pattern>/</url-pattern>
  17.     </servlet-mapping>
  18. </web-app>
复制代码
3. springmvc-servlet.xml 中的配置内容

        此文件中解释的部是采用非注解方式实现,注解和非注解两种方式都进行了测试可行。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  7.        http://www.springframework.org/schema/beans/spring-beans.xsd
  8.        http://www.springframework.org/schema/context
  9.        https://www.springframework.org/schema/context/spring-context.xsd
  10.        http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
  11.    
  12. <!--    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />-->
  13. <!--    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />-->
  14.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
  15.         <property name="prefix" value="/WEB-INF/jsp/" />
  16.         <property name="suffix" value=".jsp" />
  17.     </bean>
  18. <!--    <bean id="/index" class="org.example.controller.IndexController" />-->
  19.     <context:component-scan base-package="org.example.controller" />
  20.     <mvc:default-servlet-handler />
  21.     <mvc:annotation-driven />
  22. </beans>
复制代码
4. IndexController 中的代码内容

        和上方的 springmvc-servlet.xml 一样,也是将非注解的方式实现的代码解释了,可以方便切换测试。 
  1. package org.example.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import org.springframework.web.servlet.ModelAndView;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. //public class IndexController implements Controller {
  10. //
  11. //    @Override
  12. //    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
  13. //        ModelAndView mv = new ModelAndView();
  14. //        mv.setViewName("index");
  15. //        return mv;
  16. //    }
  17. //}
  18. @Controller
  19. public class IndexController{
  20.     @RequestMapping("/index")
  21.     public String hello(Model model){
  22.         model.addAttribute("msg", "Hello World");
  23.         return "index";
  24.     }
  25. }
复制代码
5. 最后是 index.jsp 的内容

        这里如果在调试的时候视图出错,可以不用视图加载,直接使用RestController 返回内容即可。
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>Title</title>
  5. </head>
  6. <body>
  7. ${msg}
  8. </body>
  9. </html>
复制代码
6. 其它 Tomcat 的配置

        我这里有两个版本,包括 Tomcat9和  Tomcat10 版本,两个版本切换着使用,现在是使用的  Tomcat9 两种方式都能成功运行。Tomcat 10下报错:org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包罗TLD,我临时不想去办理了。有这一个能用就先使用着。

        总之,这些依赖之间的关系标题以及导致的报错标题真的是挺烦人的。需要有耐心好好地排查啊。

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

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表