how2j.cn

步骤 1 : 404问题   
步骤 2 : 正确的端口号   
步骤 3 : 环境变量   
步骤 4 : 确定Web应用是否成功启动   
步骤 5 : webapps下的ROOT目录   
步骤 6 : 访问地址的时候是否加了web应用的名称   
步骤 7 : 是否访问对资源了   
步骤 8 : 不能访问WEB-INF目录下的资源   
步骤 9 : 访问地址后面多加了一个斜杠   

步骤 1 :

404问题

404表示File Not Found, 文件不存在错误。
通过学员反映,出现比较多的问题是页面报404错误,因此除了前面的 Tomcat 问题排查 之外,又专门做了这么一个404问题排查的文章,提供问题分析的思路和对策。
步骤 2 :

正确的端口号

出现404错误证明,TOMCAT是启动成功了的。 但是在一台计算机上,可以启动多个端口号不一样的TOMCAT, 所以请确保自己访问的是正确的那个端口号,别自己启动的是8080端口号的TOMCAT,但是访问的地址却用的是80端口(默认),这样肯定会出现404错误的。
步骤 3 :

环境变量

假设有两个Tomcat A和 B,自己分明运行的是B 下的startup.bat, 但是启动的却是A,为什么会这样呢? 这就是环境变量在作祟了。
在环境变量中有两个属性:分别是CATALINA_HOME和CATALNIA_BASE,如果这个值指向的是A,那么即便运行的是B下的startup.bat, 真正启动的还会是A。

解决办法: 删除掉这个环境变量,或者使用移除了环境变量影响的纯净版 Tomcat
步骤 4 :

确定Web应用是否成功启动

虽然Tomcat启动成功了,但是对应的Web应用启动失败,依然会导致404错误。
怎么判断Web应用成功与失败呢? 倘若Web引用启动失败,那么就一定会在Tomcat的logs目录下的 localhost.当前日期.log 里留下错误信息。
打开这个文件,检查对应的Web应用是否启动过程中报错了。 也许是web.xml多写了一个标签结束,也许是对应的servlet类找不到。
确定Web应用是否成功启动
步骤 5 :

webapps下的ROOT目录

有的时候,在server.xml 中配置的<context 是以“/"为开始路径的,与此同时,在webapps目录下还存在一个ROOT目录,这个ROOT目录其实也是告诉tomcat,以“/” 为开始路径,那么这样就发生冲突了,Tomcat只能二选一,通常情况下都会选择ROOT目录,那么在server.xml中配置的就<context 就无法启动了,导致访问对应的资源提示404错误。
解决办法就是删除掉ROOT目录,或者把ROOT目录重命名
步骤 6 :

访问地址的时候是否加了web应用的名称

这个也是常犯的错误,加入部署的时候,指定了路径,比如:
<Context path="/j2ee" docBase="e:\\project\\j2ee\\web" debug="0" reloadable="false" />

那么访问的时候,要记得加上j2ee,像这样:
http://127.0.0.1:8080/j2ee/hello
步骤 7 :

是否访问对资源了

。。。 这种错误也常见,你写的文件是 hello.html, 但是访问的是 holle.html,自然会提示404啦
步骤 8 :

不能访问WEB-INF目录下的资源

从安全角度触发,TOMCAT不允许访问WEB-INF目录下的HTML,JSP文件。 所以如果你的资源文件放在WEB-INF下,也会提示404错误
步骤 9 :

访问地址后面多加了一个斜杠

访问地址后面多加了一个斜杠
如图,本来应该访问

http://127.0.0.1:8080/j2ee/login.html

但是却访问了地址:
http://127.0.0.1:8080/j2ee/login.html/
访问地址后面多加了一个斜杠


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2017-10-25 站长,这个是web应用坏了吗???
Bigone



先是报错500后来刷新之后404
25-Oct-2017 16:18:16.051 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
25-Oct-2017 16:18:16.051 信息 [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
25-Oct-2017 16:18:22.736 信息 [http-nio-80-exec-1] org.apache.catalina.core.ApplicationContext.log Marking servlet [HelloServlet] as unavailable
25-Oct-2017 16:18:22.737 严重 [http-nio-80-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet [HelloServlet]
 java.lang.ClassNotFoundException: HelloServlet
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:512)
	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:493)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1050)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)


							


1 个答案

Bigone 答案时间:2017-10-25
在IDEA里跑正常呢。。。还有站长那个部署的路径,项目名后又加了一个”//web“啥意思??是规定吗?表示web小程序docBase="e:\\project\\j2ee\\web"




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-10-18 server.xml内容的问题
Serenity2020
<Context path="/" docBase="e:\\project\\j2ee\\web" debug="0" reloadable="false" /> 这个地方 在测试root下test.html是否部署成功时,docBase是不是要改动,怎样改动呢








答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-10-15 使用Servlet实现CRUD,出现404问题
2017-07-19 ……资源文件放在WEB-INFO下……




提问之前请登陆
关于 J2EE-Tomcat-404问题排查 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图