Tomcat启动失败提示Servlet部署路径重复

    用Java开发的项目,因为很简单,所以用的依然是Servlet。之前一切正常,但是新增了一个Servlet之后,部署到服务器,却总是启动失败,控制台打印的东西很多,但是分析发现主要错误应该是这个地方:


Caused by: java.lang.IllegalArgumentException: The servlets named [RevelationServlet] and [cn.lzgd.servlet.RevelationServlet] are both mapped to the url-pattern [/RevelationServlet] which is not permitted。意思应该是这两个Servlet同时部署到这/RevelationServlet这一个路径了。

    但是web.xml里面我只部署了这一个啊,没有重复啊。

<servlet>
    <display-name>RevelationServlet</display-name>
    <servlet-name>RevelationServlet</servlet-name>
    <servlet-class>cn.lzgd.servlet.RevelationServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RevelationServlet</servlet-name>
    <url-pattern>/RevelationServlet</url-pattern>
  </servlet-mapping>

    找其他地方也找不到哪里的问题。试着将web.xml里面对应的这个Servlet的路径删掉,竟然可以启动了!看来就是这个地方的问题。但是也不能不部署啊,找来找去,问题还是没有解决。只要在web.xml里加上对这个Servlet的url-pattern的指向就会出错。

    上网查找了半天,大都是说web.xml的部署重复,到哪里复制一份web.xml过来就好了之类,根本无法解决问题。

    正在郁闷的时候,无意间发现Servlet的代码里面,在类前面,有这么一句:@WebServlet("/RevelationServlet"),这不就是提示说重复的那个路径么,原来在这里!去查看其它没有问题的Servlet,前面却没有这么一句。基本断定是在这里重复的了,因为在web.xml里面也指向了这个路径。试着删掉这一句,果然tomcat可以启动了。

    那么问题来了,既然在Servlet的代码里已经写了这么一句了,是不是在web.xml里面就不用再部署了呢,换句话说这两个地方的作用是等同的呢?于是果断将web.xml里面关于这个Servlet的部署给删掉,依然能运行。

    至此,终于真相大白。因为新建Servlet的时候都会自动生成这一句代码:@WebServlet("/RevelationServlet"),已经声明了通过这个路径就可以找到这个Servlet,而如果再去web.xml里面去声明,当然就重复了。其他的Servlet为什么没有出现问题,是因为在其他Servlet在编辑之前我都把这句当做无用的内容给删掉了。看来这自动生成的代码还是要慎重删除。

    不得不承认,虽然多年前就开始接触java,但是到今天对java仍然是一知半解,有很多东西不知道是什么意思,只是看别人怎么做,就怎么做。具体是谁教我要在web.xml里面部署Servlet路径的也是忘了,也许以前的Eclipse版本不会自动生成这一句代码,而新版本可以自动生成。学习还是不要只停留在表面,多去探索一下为什么比较好。

   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值