一、URL路径导致的 SpringMVC项目 404问题
SpringMVC项目的各项代码都没有问题,但是在页面请求时仍然显示404,编译的时候报了下面的问题:
org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
14-Oct-2024 17:53:55.932 信息 [RMI TCP Connection(2)-127.0.0.1]
但实际上面的问题并不致命,只要能打开浏览器,说明JAVA代码编译成功,后面页面404的问题就有其它原因。我后来在排查的过程中发现是页面的URL问题,SpringMVC 默认的请求URL都是带项目名称的,如下图 URL 部分,我习惯设置的时候把这个URL部分时的项目名称删掉,导致了404错误。
这里建议不用改,要改的话就不能光在这个地方修改,那里就会出错。改这里之前需要先修改请求路径的规则,有两种方法:
一是进行Tomcat配置修改,在HOST配置里操作,不建议这样处理,麻烦。
二就是在Tomcat 配置里修改,如下图,在运行Tomcat的时候注意左上角 Tomca 的图标是不是有一个叉号,如果有说明 Tomca 未正常配置,需要点击一下修复进行处理。实际也就是下面这个图的编辑界面。在应用程序上下文处配置请求的URL前缀,也就是设置带不带项目名或者你自定义一个前缀路径,这样上面配置的请求地址与下面的前缀一样才能正确。
建议直接用默认的就行,路径上增加项目名称也方便多项目调试进行区分,这样的话 URL上基本就不会导致问题。
二、Tomcat本身引入的jar包导致404问题及Tomcat调试日志开启
1. Tomcat本身引入的jar包导致404问题
如下图,Tomcat 库栏中我并没有做任何操作。但发现我的 Tomcat9 和 Tomcat10 是有区别的,因此编译的时候可能会导致问题。我后来直接就只使用 Tomcat 10了,毕竟目前不需要去适配和调试各个版本的 Tomcat,太高版本的Tomcat也更容易引起问题,暂时就主要使用 Tomcat9吧。
2. 关于启用Tomcat调试日志记录的开启:
开发中很有必要启用 Tomcat 调试日志记录,以便在终端能直观地查看Tomcat的错误。通过在 Tomcat 的 logging.properties 文件中启用相关记录器的调试级别,你可以获取有关已扫描但未在其中找到TLD的更多信息。有助于你更好地了解问题的根本原因。
修改位置:Tomcat 配置目录conf下的 logging.properties 文件,找到如下行,把注释去掉即可。这样Tomcat将启用 TldScanner 的详细日志记录,查看Tomcat的日志文件可以获取更多信息。
org.apache.jasper.servlet.TldScanner.level = FINE
三、SpringMVC 项目搭建过程的整体总结
目前通过这几篇文章,一是两各种方式实现的SpringMVC项目过程,链接如下:
JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例-CSDN博客文章浏览阅读513次,点赞11次,收藏25次。在项目执行的时候可能容易遇到404错误,如果代码上没有什么问题,错误可能出在使用tomcat运行的时候未把lib包放到tomcat下,导致tomcat运行时找不到jar包从而运行出错。另外上面在配置springMVC框架的时候需要指定contextConfigLocation上下文的配置文件地址,即SpringMVC集合spring时,spring需要用的配置文件,如上我们使用的springmvc-servlet.xml文件,此文件放在java源代码下的src/main/resources目录中。https://linge.blog.csdn.net/article/details/142846672 以及两篇报错的文章 (web.xml 配置)如下一:使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题-CSDN博客文章浏览阅读508次,点赞10次,收藏13次。还有Tomcat的版本过高,目前用的是10 版本,于是试着 针对 Tomcat 的版本也进行降降,就把 Tomcat10版本降到了 Tomcat9版本。经过检查,基本的错误原因都可以完全排除,程序代码没有问题,WEB导入包也没有问题,静态资源过滤以及编译出来的 out 目录中的文件也都正常,但是就是报 404 错误,而且 Tomcat 页面就只是显示无法找到资源,也没有更编辑 的错误。于是修改了 spring 配置中的声明问,解决了声明的问题之后又碰到了一个新的问题。认真看了看控制台的日志,发现有。https://linge.blog.csdn.net/article/details/142884626
如下二(程序中标红的问题):
SpringMVC开发web.servlet.DispatcherServlet、控制器类 implements Controller标红及maven.plugins:maven-site..标红问题-CSDN博客文章浏览阅读323次,点赞9次,收藏12次。在配置SpringMVC项目时,org.springframework.web.servlet.DispatcherServlet 标红显示:org.springframework.web.servlet.DispatcherServlet' 未分配到'javax.servlet.Servlet,jakarta.servlet.程序都能运行,但是org.springframework.web.servlet.DispatcherServlet 依然标红。虽然我的程序是能正常运行的。https://linge.blog.csdn.net/article/details/142894627 以及编译中的问题和最后记录的一个完整的项目代码示例如下:
找到多个名为[spring_web]的片段、TldScanner.scanJars至少有一个JAR被扫描问题..以及一个SpringMVC项目运行起来的完整配置和代码示例程序-CSDN博客文章浏览阅读295次,点赞12次,收藏8次。找到多个名为[spring_web]的片段、TldScanner.scanJars至少有一个JAR被扫描问题..以及一个SpringMVC项目运行起来的完整配置和代码示例程序。这里如果在调试的时候视图出错,可以不用视图加载,直接使用RestController 返回内容即可。https://linge.blog.csdn.net/article/details/142915607 就基本能排除 SpringMVC 项目搭建过程中的各种问题。