Tomcat ROOT目录资源无法访问(访问报404)

前言

最近自己写了个项目,后台服务器用的tomcat,我把用户头像保存在了tomcat ROOT 目录user_head文件夹中,访问部署在tomcat下跟ROOT同级目录的项目可以访问,但是访问ROOT中的资源无法访问报404,就像下面这样:

http://localhost:8989/Serve/GetUserHabit  访问这种项目中的接口可以访问

http://localhost:8989/user_head/10034.jpg 访问这种ROOT目录下的资源报404

这种问题就感觉很诡异,在网上查了很多资料都跟我这个问题不匹配,所以专门写此文章记录一下,也为兄弟们快速解决问题做一份贡献。

问题原因及解决办法

先说说我是怎么发现问题的。

我是在tomcat启动日志看到了好几个错误信息,就是下面这个:

Tomcat ROOT目录资源无法访问(访问报404)

Tomcat ROOT目录资源无法访问(访问报404)

我无法访问ROOT目录下资源的原因就是这个错误造成的,如果你也是跟我一样的问题不如先检查一下tomcat启动日志看看有没有什么错误。

我这个tomcat日志是直接在eclipse控制台看的,也可以直接到tomcat安装目录下的logs文件夹中查看

F:\Program Files\Apache Software Foundation\Tomcat 7.0\logs (我的logs在这个位置)

找到logs目录下的这个文件,文件上面有时间可以先从最近的查看。

Tomcat ROOT目录资源无法访问(访问报404)

点开就可以看到错误日志了。

ok回到正题,说说我出现上面问题的原因:

我在servlet中加了一个listener 并且在web.xml中配置了该listener之后需就出现了该错误。去掉这个配置项目就正常运行,打开这个配置就出现访问不到的问题。具体原因我也不清楚,我的解决办法是listener不在web.xml中进行配置,直接在类上面加上listener注解。

这是在web.xml中的listener配置,我用这个配置就出现了上面问题,如有高手知道问题原因可以帮忙解释一下。

 <web-app>
 <listener>
   <listener-class>com.WebInitListener</listener-class>
</listener> 
</web-app>

这是注解的方式(解决了我的问题)

@WebListener
public class WebInitListener implements ServletContextListener{

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {	
	}

}

上一篇:vue proxy代理 显示404 原因竟是它?!


下一篇:Laravel 5.8 bug修复 在abort方法中自定义提示消息 没有显示