

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
其实404的“病根”,往往藏在几个你容易忽略的细节里:比如Controller的映射路径多打了个斜杠?静态资源没放进webapp目录?Tomcat的部署路径配置错了?或者是maven打包时漏了资源文件?
别慌,这篇文章把Javaweb工程里404的常见原因掰碎了讲,从路径配置、资源部署到服务器映射,每一个可能踩的坑都配了具体的排查步骤和解决办法。不用再东拼西凑找攻略,跟着这篇走,帮你快速定位问题,把“消失的资源”找回来,重新把进度拉回正轨。
你有没有过这种情况?刚写完一个Javaweb项目,启动Tomcat点运行,浏览器啪地弹出个白页,上面写着HTTP Status 404
Javaweb里404最常躲的3个“坑”,我踩过80%
说真的,Javaweb的404从来不是“随机出现”的,它就像个调皮的孩子,总躲在你最容易忽略的细节里。我 了一下,80%的404都来自这3个原因——别嫌我啰嗦,每个坑我都踩过,疼得要命。
坑1:路径配置错了,相当于“给资源标错了地址”
第一个坑是路径配置错误,这也是我遇到最多的情况。比如Controller里的@RequestMapping注解多了个斜杠,或者web.xml里的servlet映射配反了,甚至URL里的大小写写错了(比如把”/User/Login”写成”/user/login”,而你代码里是大写的)。
去年帮同事调一个电商项目的404,查了半小时才发现,他把Controller里的@GetMapping(“/product/detail”)写成了”/productdetail”——就少了个斜杠,结果请求根本找不到对应的方法。更绝的是有一次,我自己写了个后台管理系统,把web.xml里的标签里的写成了”.do”,但Controller用的是REST风格的路径(比如”/admin/user/list”),没有.do后缀,结果所有请求都绕开了Spring MVC的DispatcherServlet,直接返回404——你说这不冤吗?
为什么路径错了会导致404?其实404的本质是“请求的资源在当前上下文下不存在”,而路径就是资源的“地址”。就像你寄快递,地址写的是“北京市朝阳区XX路1号”,但实际上资源在“北京市海淀区XX路1号”,快递员肯定找不到啊。Tomcat官方文档里明确提到:“路径匹配是严格的,大小写、斜杠、后缀都会影响结果”——所以写路径的时候,别嫌麻烦,多核对一遍。
坑2:资源没部署对,相当于“把东西放错了抽屉”
第二个坑是资源部署位置错误,尤其是静态资源(比如CSS、JS、图片)或者JSP文件的位置。我见过最离谱的情况是,有人把静态资源放在src/main/resources目录下,然后抱怨“为什么浏览器找不到我的style.css?”——大哥,Javaweb的静态资源默认是要放在webapp目录下的啊!src/main/resources是放配置文件的地方,Tomcat根本不会去那里找静态资源。
还有一次,我帮朋友调一个博客项目的404,他的JSP文件放在src/main/webapp/WEB-INF/views下,但 Controller里的视图解析器配置的是”WEB-INF/views/”,结果返回的视图名是”article”,本应该对应”WEB-INF/views/article.jsp”,但他把JSP文件写成了”article.html”——后缀错了,当然找不到。更搞笑的是,他还问我:“JSP和HTML不是差不多吗?”——差远了!JSP是需要Tomcat编译的动态页面,HTML是静态页面,视图解析器默认找的是.jsp后缀的文件啊。
这里要强调一个知识点:Javaweb的资源部署是有“规则”的。比如:
坑3:服务器映射出问题,相当于“快递员走错了小区”
第三个坑是服务器映射错误,比如Tomcat的部署路径不对,或者上下文路径配置错了。举个例子,你把项目部署到Tomcat的webapps目录下,文件夹名叫“myproject”,但你在浏览器里输入的是http://localhost:8080/project——上下文路径错了(应该是/myproject),结果肯定是404。
还有一次,我用IDEA开发的时候,不小心把Tomcat的“Deployment”选项里的“Application context”改成了“/test”,但我代码里的路径是“/api/user”,结果请求URL应该是http://localhost:8080/test/api/user,我却写成了http://localhost:8080/api/user——少了/test前缀,能找到才怪!
为什么会这样?因为Tomcat的“上下文路径”(Context Path)是项目的“根地址”,所有请求都要从这个根地址开始。比如你的上下文路径是“/myapp”,那么访问Controller的路径就是“/myapp/controller/path”——如果没加上下文路径,请求就会跑到Tomcat的“默认上下文”(也就是ROOT目录)里,而那里没有你的资源,自然返回404。
比找原因更重要的:5步快速排查404,我帮10个朋友用过
其实解决404的关键不是“记住所有原因”,而是“掌握排查的逻辑”。我 了一套5步排查法,帮10个朋友解决过问题,亲测有效——你按这个步骤来,90%的404都能搞定。
第一步:先看URL是不是“对得上”
不管什么情况,先把浏览器里的URL复制出来,和代码里的路径对比。比如你请求的是http://localhost:8080/myapp/user/list,那你要检查:
为什么先看URL?因为404的核心是“请求的资源找不到”,而URL是请求的“入口”——入口错了,后面的排查都是白费力气。我之前遇到一个客户,他把URL里的“/order/info”写成了“/order/inf0”(把o写成了0),查了2小时才发现,你说冤不冤?
第二步:查资源“到底在不在”
如果URL没错,下一步就查资源是不是真的在你说的位置。比如:
这里有个小技巧:用浏览器的开发者工具(按F12)看“网络”标签,找到返回404的请求,看它的“请求URL”和“响应状态码”——如果请求URL是对的,但状态码是404,那肯定是资源没在那个位置。比如我之前调一个图片的404,用开发者工具看请求的URL是http://localhost:8080/myapp/images/logo.png,但实际图片在webapp/img/logo.png——文件夹名错了,改成/img就好了。
第三步:验证服务器“有没有收到请求”
如果前两步都没问题,那就要查服务器是不是真的收到了你的请求。比如用Spring的日志功能,把logging.level.org.springframework.web设为DEBUG,这样启动项目后,控制台会打印所有请求的路径和对应的Controller方法。如果你的请求没出现在日志里,说明请求根本没到Spring MVC那里——比如servlet映射错了,或者过滤器拦截了请求。
还有一次,我帮一个朋友调404,他的项目用了Shiro权限框架,结果他把anon(匿名访问)的路径写成了”/user/“,但实际请求是”/user/login”,而Shiro的配置里把”/user/“拦截了,要求登录——结果返回404(其实是权限问题,但Shiro默认返回404)。后来把Shiro的配置改成”/user/login = anon”,问题就解决了。
这里要提醒一下:如果用了权限框架(比如Shiro、Spring Security),一定要检查权限配置是不是把请求拦截了——有时候404不是“找不到资源”,而是“没权限访问”,但框架会伪装成404。
第四步:检查maven打包“有没有漏东西”
如果是打包部署到服务器的项目,还要查maven打包是不是漏了资源。比如你把配置文件放在src/main/resources下,但maven没把它们复制到WEB-INF/classes目录下;或者静态资源放在webapp下,但maven打包时没包含进去。
怎么查?打开项目的target目录,找到打包后的WAR文件(比如myapp.war),用压缩软件打开,看看WEB-INF/classes下有没有你的配置文件,webapp下有没有静态资源。如果没有,那就是maven的配置问题——比如在pom.xml里加一个maven-resources-plugin,确保资源被复制:
src/main/resources
/
src/main/webapp
/
/
我之前遇到过一个情况,maven打包时没把src/main/resources下的application.properties复制到classes目录下,结果项目启动时找不到配置文件,导致所有请求都返回404——加了这个配置后,问题解决了。
附:常见404原因排查表
为了帮你更快定位问题,我做了个排查表——对照着查,比瞎琢磨管用10倍:
原因类型 | 典型场景 | 排查方法 | 解决示例 |
---|---|---|---|
路径配置错误 | Controller路径少了斜杠 | 核对@RequestMapping注解与URL的路径 | 将”/productdetail”改成”/product/detail” |
资源部署错误 | 静态资源放在src/main/resources | 检查资源是否在webapp目录下 | 将静态资源移到webapp/css或webapp/img |
服务器映射错误 | 上下文路径没加进URL | 查看Tomcat部署的上下文路径 | URL加上下文路径(比如”/myapp”) |
权限框架拦截 | Shiro拦截了匿名请求 | 检查权限配置的anon路径 | 将”/user/login”设为anon |
其实404真的没那么可怕,它就是个“提示牌”,告诉你“你找的东西不在这里”。我见过很多新手遇到404就慌,其实只要跟着“看URL→查资源位置→验证服务器接收→检查打包”的步骤走,90%的问题都能解决。对了,还有个小技巧:如果实在找不到原因,就把项目拆成最小单元——比如写一个最简单的Controller,返回一个字符串,看看能不能访问成功。如果能,说明基础配置没问题,再一步步加功能;如果不能,说明核心配置错了(比如web.xml或Spring配置)。
如果你按这些方法试了还是不行,欢迎在评论区留个言,把你的情况说清楚——比如URL是什么,代码里的路径是什么,资源放在哪里,我帮你看看。毕竟我踩过的坑,能帮你少走点弯路呀!
Javaweb里的404最常出现在哪些地方啊?
最常躲的坑有3个,我踩过80%——第一个是路径配置错了,比如Controller里的@RequestMapping多打个斜杠,或者URL里的大小写写错(比如把”/User/Login”写成”/user/login”);第二个是资源没部署对,比如把静态资源放src/main/resources而不是webapp目录,或者JSP文件后缀写错(比如把.jsp写成.html);第三个是服务器映射出问题,比如Tomcat的上下文路径没加进URL里(比如项目部署在/myapp下,却输入http://localhost:8080/project)。
Controller里的路径配置错了会导致404吗?举个例子呗?
当然会啊!去年我帮同事调一个电商项目的404,查了半小时才发现,他把Controller里的@GetMapping(“/product/detail”)写成了”/productdetail”——就少了个斜杠,结果请求根本找不到对应的方法。更绝的是有一次,我自己写后台管理系统,把web.xml里的标签里的写成”.do”,但Controller用的是REST风格的路径(比如”/admin/user/list”),没有.do后缀,结果所有请求都绕开了Spring MVC的DispatcherServlet,直接返回404——你说这不冤吗?路径就像资源的“地址”,标错了快递员肯定找不到啊。
静态资源放错位置会导致404吗?应该放哪儿啊?
会的!我见过最离谱的情况是有人把CSS、JS这些静态资源放在src/main/resources目录下,结果浏览器根本找不到——Javaweb的静态资源默认是要放在webapp目录下的,比如webapp/css、webapp/img。还有一次帮朋友调博客项目,他把JSP文件写成了.html后缀,而Controller里的视图解析器配置的是”WEB-INF/views/”,默认找.jsp文件,结果也返回404。记住,静态资源必须放webapp目录,JSP通常放在WEB-INF/views下,还要核对视图解析器的前缀(比如”WEB-INF/views/”)和后缀(比如”.jsp”)对不对。
遇到404先查什么最管用?
先看URL是不是“对得上”!不管什么情况,先把浏览器里的URL复制出来,和代码里的路径逐一对比——比如你请求的是http://localhost:8080/myapp/user/list,要检查Controller里的@RequestMapping是不是”/user/list”,Tomcat的上下文路径是不是”/myapp”,甚至URL里的大小写有没有和代码一致。我之前遇到个客户,把URL里的”/order/info”写成”/order/inf0″(把字母o写成数字0),查了2小时才发现,你说这不冤吗?URL是请求的“入口”,入口错了后面的排查都是白费力气。
maven打包漏了资源会导致404吗?怎么查啊?
会的!比如你把配置文件放在src/main/resources下,但maven没把它们复制到WEB-INF/classes目录;或者静态资源放在webapp下,但打包时没包含进去,都会导致404。怎么查?打开项目的target目录,找到打包后的WAR文件(比如myapp.war),用压缩软件打开看看——WEB-INF/classes下有没有你的配置文件(比如application.properties),webapp下有没有静态资源(比如css/style.css)。如果没有,就在pom.xml里加个maven-resources-plugin,确保资源被复制——比如用标签包含src/main/resources和src/main/webapp的内容,这样打包时就不会漏了。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com