Apache Tomcat 9がWindows 10で起動できない問題

Webサイトにアクセスして自動でボタンをポチポチするものを作ろうとしているけれど、Web系舐めていた。全然わからない。今までサーバー立ててApache入れるくらいでHTML少しいじって表示変わるの見てWeb系簡単だと思っていたのに動的なサイト作ろうと思ったらすごく難しかった。

やりたいことのためにApache Tomcatをインストールする必要がありそうだとわかったのでWindows 10にインストールしたらlocalhostにアクセスしても表示されない。exeでインストールするだけでできるものじゃなかった。

環境と使ったもの

Windows 10
apache-tomcat-9.0.20.exe
tomcat-native-1.2.21-openssl-1.1.1a-win32-bin
TCPView

問題

Tomcat 9をインストールしてブラウザからlocalhost:8080にアクセスしてもつながらない

やったこと

  1. jdk-11.0.3_windows-x64_bin.exeのインストール
  2. Tomcat 9のインストール
  3. 環境変数のユーザー変数に追加
    JAVA_HOME
    C:\Program Files\Java\jdk-11.0.3
  4. 環境変数のシステム変数に追加
    Path
    C:\Program Files\Java\jdk-11.0.3\bin

出たエラー

tomcatをインストールしたフォルダのlogsフォルダでcatalina.[日付].logを確認する。

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
10-Jun-2019 22:20:25.800 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.20
10-Jun-2019 22:20:25.803 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 3 2019 22:26:00 UTC
10-Jun-2019 22:20:25.803 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.20.0
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.0
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk-11.0.3
10-Jun-2019 22:20:25.804 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.3+12-LTS
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\tomcat9
10-Jun-2019 22:20:25.805 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         C:\tomcat9
10-Jun-2019 22:20:25.814 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
10-Jun-2019 22:20:25.814 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\tomcat9\conf\logging.properties
10-Jun-2019 22:20:25.815 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
10-Jun-2019 22:20:25.816 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
10-Jun-2019 22:20:25.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
10-Jun-2019 22:20:25.818 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
10-Jun-2019 22:20:25.819 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\tomcat9
10-Jun-2019 22:20:25.820 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=C:\tomcat9
10-Jun-2019 22:20:25.820 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=C:\tomcat9\temp
10-Jun-2019 22:20:25.822 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk-11.0.3\bin;C:\Windows\Sun\Java\bin;C:\Program Files\Java\jdk-11.0.3\bin;(一部省略)]
10-Jun-2019 22:20:26.064 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
10-Jun-2019 22:20:26.150 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[HTTP/1.1-8080]]
        org.apache.catalina.LifecycleException: Protocol handler initialization failed
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1059)
                at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
                at org.apache.catalina.startup.Catalina.load(Catalina.java:584)
                at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:566)
                at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:304)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
        Caused by: java.net.BindException: Address already in use: bind
                at java.base/sun.nio.ch.Net.bind0(Native Method)
                at java.base/sun.nio.ch.Net.bind(Net.java:461)
                at java.base/sun.nio.ch.Net.bind(Net.java:453)
                at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
                at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:80)
                at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:248)
                at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:222)
                at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1119)
                at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1132)
                at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:557)
                at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:74)
                at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
                ... 13 more



エラー1

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

これはTomcat Native Connectorのtcnative-1.dllがないせいらしい。Tomcatの公式ページへ行き、Apache Tomcat® - Tomcat Native Downloads から「Native 1.2.21 Windows Binaries zip (recommended) 」をダウンロードする。
解凍してtomcat-native-1.2.21-openssl-1.1.1a-win32-bin\bin\x64の中のtcnative-1.dllをTomcatをインストールしたbinフォルダに入れる。
なくても問題ないけれど、Tomcat9w.exeを起動してJavaタブのJava Optionsの一番下に追加する。

-Djava.library.path=c:\tomcat9\bin

f:id:ultra-genma:20190610224716p:plain



エラー2

Caused by: java.net.BindException: Address already in use: bind

アドレス(localhost127.0.0.1)が使われていると出る。Portの8080が使われているようなのでTCPViewというMicrosoftのツールで調べるとFirefoxのプロセスが8080でたくさんあったのでサーバーの設定を変更する。
Tomcatをインストールしたフォルダの中のconfフォルダにあるserver.xmlテキストエディタで開き、Connector portを他とかぶらない適当な80などの値にする。

<Connector port="80" protocol="HTTP/1.1"
       connectionTimeout="20000"
       redirectPort="8443" />



これでブラウザからlocalhostにアクセスするとTomcatのページが表示される。
f:id:ultra-genma:20190610225701p:plain



参考

・エラー1
eclipse - What does "The APR based Apache Tomcat Native library was not found" mean? - Stack Overflow

・エラー2
eclipse - How do I resolve the "java.net.BindException: Address already in use: JVM_Bind" error? - Stack Overflow

Tomcat Native Connector - 1.2
Apache Tomcat® - Tomcat Native Downloads

・TCPView v3.05
TCPView for Windows - Windows Sysinternals | Microsoft Docs