2

そのため、組み込みのjetty 9サーバーをセットアップしようとしています。しかし、私がしようとすると:

mvn clean compile exec:java

実行は次の時点で停止します:

INFO: oejs.Server:com.main.SimpleServer.main(): jetty-9.0.0.RC2

しばらくすると、次のような例外が発生します。

WARN:oejuc.AbstractLifeCycle:com.main.SimpleServer.main(): 失敗しました org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a0110e keys=-1 selected=-1: java.io.IOException: ループバック接続を確立できません

java.io.IOException: ループバック接続を確立できません java.net.ConnectException: 接続が拒否されました: 接続

私のコードは次のようになります。

public class HelloHandler extends AbstractHandler {
    final String _greeting;

    final String _body;

    public HelloHandler() {
        _greeting = "Hello World";
        _body = null;
    }

    public HelloHandler(String greeting) {
        _greeting = greeting;
        _body = null;
    }

    public HelloHandler(String greeting, String body) {
        _greeting = greeting;
        _body = body;
    }

    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>" + _greeting + "</h1>");
        if (_body != null) response.getWriter().println(_body);
    }
}

public class SimpleServer {
     public static void main(String[] args) throws Exception {
            Server server = new Server(8080);
            server.setHandler(new HelloHandler());
            server.start();
            server.join();
        }
}

私の pom.xml は次のようになります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>TestJetty</groupId>
    <artifactId>TestJetty</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <properties>
    <jettyVersion>9.0.0.RC2</jettyVersion>
  </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>${jettyVersion}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-websocket</artifactId>
            <version>7.4.4.v20110707</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
            <version>${jettyVersion}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
        </dependency>

    </dependencies>
    
    <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jettyVersion}</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution><goals><goal>java</goal></goals></execution>
        </executions>
        <configuration>
          <mainClass>com.main.SimpleServer</mainClass>
        </configuration>
      </plugin>
      
    </plugins>
  </build>
</project>
4

2 に答える 2

2

これは、localhost ループバックに関する何かが誤って構成されている (非ループバック IP アドレスとして報告されているなど) か、何かによって使用されていないことを意味します (最も一般的な原因は、Microsoft Windows ポリシーの決定とファイアウォール ルールです)。

あまり一般的ではありませんが、IPv4 が使用できない (IPv6 のみ) マシンです。

これをコンパイルして実行してみてください...

package stackoverflow.jetty;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

public class AddrList
{
    public static void main(String[] args)
    {
        try
        {
            InetAddress loopback = InetAddress.getLoopbackAddress();
            dump("Loopback",loopback);
        }
        catch (Throwable t)
        {
            System.out.println("Unable to getLoopbackAddress()");
            t.printStackTrace();
        }

        try
        {
            InetAddress localhost = InetAddress.getLocalHost();
            dump("LocalHost",localhost);
        }
        catch (Throwable t)
        {
            System.out.println("Unable to getLocalHost()");
            t.printStackTrace();
        }

        try
        {
            InetAddress alladdr = InetAddress.getByName("0.0.0.0");
            dump("0.0.0.0",alladdr);
        }
        catch (Throwable t)
        {
            System.out.println("Unable to getLocalHost()");
            t.printStackTrace();
        }

        try
        {
            Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
            for (NetworkInterface iface : Collections.list(nets))
            {
                try
                {
                    System.out.println("DisplayName = " + iface.getDisplayName());
                    System.out.println("Name = " + iface.getName());

                    List<InetAddress> addrs = Collections.list(iface.getInetAddresses());
                    int i = 0;
                    for (InetAddress addr : addrs)
                    {
                        dump(Integer.toString(i++),addr);
                    }
                }
                catch (Throwable t)
                {
                    System.out.println("Unable to InetAddress for NetworkInterface: " + iface.getDisplayName());
                    t.printStackTrace();
                }
            }
        }
        catch (SocketException e)
        {
            System.out.print("Unable to get all network interfaces");
            e.printStackTrace();
        }
    }

    public static void dump(String type, InetAddress addr)
    {
        String header = String.format("[%s] InetAddress",type);
        try
        {
            System.out.println(header + " = " + addr);
            System.out.println(header + ".isAnyLocalAddress = " + addr.isAnyLocalAddress());
            System.out.println(header + ".isLinkLocalAddress = " + addr.isLinkLocalAddress());
            System.out.println(header + ".isLoopbackAddress = " + addr.isLoopbackAddress());
        }
        catch (Throwable t)
        {
            System.out.printf("[%s] Failed to list InetAddress details%n",type);
            t.printStackTrace();
        }

        try
        {
            header = String.format("[%s] InetSocketAddress",type);
            InetSocketAddress isockaddr = new InetSocketAddress(addr,8080);
            System.out.println(header + " = " + isockaddr);
            System.out.println(header + ".isUnresolved = " + isockaddr.isUnresolved());
        }
        catch (Throwable e)
        {
            e.printStackTrace();
        }
    }
}

これにより、マシン上のネットワーク インターフェイスのすべてのバリエーションが一覧表示されます。エラーまたは例外が発生した場合は、そのマシンで Jetty を起動する前に、まずそれに対処する必要があります。

通常のマシンでは、次の出力が表示されます。

[Loopback] InetAddress = localhost/127.0.0.1
[Loopback] InetAddress.isAnyLocalAddress = false
[Loopback] InetAddress.isLinkLocalAddress = false
[Loopback] InetAddress.isLoopbackAddress = true
[Loopback] InetSocketAddress = localhost/127.0.0.1:8080
[Loopback] InetSocketAddress.isUnresolved = false
[LocalHost] InetAddress = lapetus/127.0.1.1
[LocalHost] InetAddress.isAnyLocalAddress = false
[LocalHost] InetAddress.isLinkLocalAddress = false
[LocalHost] InetAddress.isLoopbackAddress = true
[LocalHost] InetSocketAddress = lapetus/127.0.1.1:8080
[LocalHost] InetSocketAddress.isUnresolved = false
[0.0.0.0] InetAddress = /0.0.0.0
[0.0.0.0] InetAddress.isAnyLocalAddress = true
[0.0.0.0] InetAddress.isLinkLocalAddress = false
[0.0.0.0] InetAddress.isLoopbackAddress = false
[0.0.0.0] InetSocketAddress = /0.0.0.0:8080
[0.0.0.0] InetSocketAddress.isUnresolved = false
(snip ... long list of other interfaces)

これは、ループバック、ローカルホスト、および 0.0.0.0 (任意のインターフェイス) の 3 つの選択肢すべてが、Jetty の可能なリスナーとして機能することを示しています。

最後に、最終的な非 RC Jetty 9.0.0.v20130308にアップグレードします。

于 2013-03-27T16:24:09.417 に答える
-1

Jetty サーバーが構成され、機能していました。ある晴れた日に、「ループバック接続を確立できません」というエラーが発生し始めます。マシンを再表示したところ、再び動作し始めました。したがって、このエラーは完全に Windows オペレーティング システムに関連していると思います。

于 2016-04-21T05:30:50.043 に答える