zoukankan      html  css  js  c++  java
  • [Java][Servlet] Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]

    Background: Servlet version 3.1(3.0之后就有了@WebServlet注解)

    Error

    严重: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
    java.lang.NullPointerException
    	at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
    	at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
    	at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:821)
    	at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
    	at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
    	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    	at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
    	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    	at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:877)
    	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    	at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    
    十月 27, 2016 11:36:07 下午 org.apache.coyote.AbstractProtocol destroy
    信息: Destroying ProtocolHandler ["ajp-nio-8009"]
    十月 27, 2016 11:36:07 下午 org.apache.coyote.AbstractProtocol destroy
    严重: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
    java.lang.NullPointerException
    	at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
    	at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
    	at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:821)
    	at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
    	at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
    	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    	at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
    	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    	at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:877)
    	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    	at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    
    

    我首先分析了是不是端口号被占用了的问题,使用netstat -ano|findstr "8080"未找到有使用该端口的进程。于是我回头浏览代码,并将web.xml中的servlet配置删除掉,tomcat正常启动,难道是下面的servlet配置错了?

      <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.study.servlet.LoginServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
      </servlet-mapping>
    

    这个配置没有问题,接下来就去看servlet的实现了,发现这个类有个注解,查看了一下这个注解的含义

    @WebServlet("/loginServlet")
    public class LoginServlet extends HttpServlet {
    ...
    }
    

    这里将@WebServlet("/loginServlet")注解去掉,tomcat就能启动成功,于是问题就来了,为什么注释掉这段注解就OK了?
    我们先看看这段注解是干什么的:
    ~~
    在Servlet3.0之后,可以使用注解来告知Servlet容器哪些Servlet会提供服务,使用@WebServlet("/loginServlet")注解表示了当url的请求为loginServlet,则由LoginServlet实例提供服务。所以当你添加了注解,又在web.xml中进行了servlet的配置,我猜想会造成冲突,servlet会初始化2次,那么我们删掉注解或者删掉web.xml中的配置都能正常启动tomcat。
    ~~

    以上是我面对这个Error找出的解决方案,不一定适合你的Error,仅供参考。

  • 相关阅读:
    Python学习笔记:pip使用技巧
    机器学习笔记:训练集、验证集和测试集区别
    MySQL学习笔记:3道面试题小测
    Python学习笔记:精确的四舍五入
    Hive学习笔记:列转行之collect_list/collect_set/concat_ws
    Python学习笔记:6个代码性能坏习惯
    爬虫学习笔记:打造自己的代理池
    Mysql学习笔记:5.5升级至8.0版本
    机器学习笔记:sklearn.model_selection.train_test_split切分训练、测试集
    HashSet其实就那么一回事儿之源码浅析
  • 原文地址:https://www.cnblogs.com/chenyongblog/p/6006151.html
Copyright © 2011-2022 走看看