[Java][Servlet] ProtocolHandler ["http-nio-8080"] に関連付けられたエンドポイントの破棄に失敗しました。
背景 サーブレットバージョン3.1(@WebServletアノテーションは3.0から使用可)
エラー
Serious: 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)
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)
Method.invoke(Unknown Source) at java.lang.reflect.
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
October 27, 2016 11:36:07 PM org.apache.coyote.AbstractProtocol destroy
Info: Destroying ProtocolHandler ["ajp-nio-8009"]
October 27, 2016 11:36:07 PM org.apache.coyote.AbstractProtocol destroy
Serious: 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)
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)
Method.invoke(Unknown Source) at java.lang.reflect.
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からサーブレット設定を削除したところ、tomcatは正常に起動しましたが、以下のサーブレット設定が間違っている可能性はありませんか?
<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>
この構成で問題なかったので、サーブレットの実装を見に行くと、クラスにアノテーションがあり、そのアノテーションの意味を調べると
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
...
}
ここで、@WebServlet("/loginServlet")のアノテーションを削除すると、tomcatは正常に起動します。では、なぜこのアノテーションをコメントアウトしても良いのでしょうか?
このコメントが何をするのかを見てみましょう。
~~
Servlet 3.0以降では、アノテーションを使ってどのServletがサービスを提供するかをServletコンテナに伝えることができます。@WebServlet("/loginServlet") アノテーションは、urlリクエストがloginServletであるとき、LoginServletインスタンスがサービスを提供することを示しています。そのため、web.xmlにアノテーションとサーブレット設定を追加すると、サーブレットが2回初期化されてしまうため、アノテーションを削除するか、web.xmlの設定を削除すると、正常にtomcatを起動できるようになると思います。
~~
上記は私が見つけたこのErrorの解決策ですが、あなたのErrorに合わないかもしれませんので、参考までに。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例