前言
最近自己写了个项目,后台服务器用的tomcat,我把用户头像保存在了tomcat ROOT 目录user_head文件夹中,访问部署在tomcat下跟ROOT同级目录的项目可以访问,但是访问ROOT中的资源无法访问报404,就像下面这样:
http://localhost:8989/Serve/GetUserHabit 访问这种项目中的接口可以访问
http://localhost:8989/user_head/10034.jpg 访问这种ROOT目录下的资源报404
这种问题就感觉很诡异,在网上查了很多资料都跟我这个问题不匹配,所以专门写此文章记录一下,也为兄弟们快速解决问题做一份贡献。
问题原因及解决办法
先说说我是怎么发现问题的。
我是在tomcat启动日志看到了好几个错误信息,就是下面这个:
我无法访问ROOT目录下资源的原因就是这个错误造成的,如果你也是跟我一样的问题不如先检查一下tomcat启动日志看看有没有什么错误。
我这个tomcat日志是直接在eclipse控制台看的,也可以直接到tomcat安装目录下的logs文件夹中查看
F:\Program Files\Apache Software Foundation\Tomcat 7.0\logs (我的logs在这个位置)
找到logs目录下的这个文件,文件上面有时间可以先从最近的查看。
点开就可以看到错误日志了。
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) {
}
}