Server Tomcat v7.0 Server at localhost failed to start.

一、问题场景

123

我在eclipse里新建了dynamic web项目,先写html静态页面,然后写了servlet类,然后再配置了web.xml文件,成功实现了网页应用。

谁知道第二天再次打开,就报错Server Tomcat v7.0 Server at localhost failed to start了。

这个问题显然和web.xml有关。

二、尝试解决

我尝试的解决方法有:

  1. 重写xml文件,更换了所有dynamic web项目名称。
  2. 卸载再重新安装tomcat7。
  3. 重启服务器,重启eclipse,重启电脑,换装tomcat8。

都无法解决…

最后我重写了项目,才重新跑起来。结果重启tomcat后,又遇到了这个问题,我都快疯了。

最后我删除了web.xml,奇迹出现了,项目再次跑起来了。即使少了web.xml,路由也完全没有问题…真是各种奇怪…

三、问题原因

看异常堆栈的时候发现这样一句话:

The servlets named [AddServlet] and [com.felay.servlet.AddServlet] are both mapped to the url-pattern [/AddServlet] which is not permitted,出现了多次配置。

发现Servlet3.0出现了新特性,以前在写Servlet类的时候,我们总会在web.xml中进行配置。

但是在Servlet3.0中却出现了新增注释@webServlet。该注释用于修饰自定义的Servlet,我们在通过eclipse写Servlet的时候,系统会自动生成该注释。

也就是说,系统出现了该注释后,我们不需要再在web.xml中进行配置。

如果你配置了,就会出现上述错误。后来我把注释删除了,服务器就能正常启动了。

四、更多原因

google了一下web.xml导致tomcat无法启动。发现各种各样的出错都有…

其实eclipse创建项目时,有个选项可以自动生成web.xml。我之前一直忘记勾选这个选项,然后自己写web.xml又不规范,导致出现配置错误…

后来我一直都用自动生成web.xml文件,只在这个基础文件上进行修改,再也没有出现过这个异常。

五、总结

多用自动生成,记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注