简体   繁体   English

Jetty Server无法启动:无法建立回送连接

[英]Jetty Server not starting: Unable to establish loopback connection

so I am trying to setup an embedded jetty 9 server. 所以我正在尝试设置嵌入式jetty 9服务器。 However when I try: 但是,当我尝试:

mvn clean compile exec:java mvn clean编译exec:java

The execution halts at : 执行停止在:

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

After a while I get exceptions like: 一段时间后,我得到如下异常:

WARN:oejuc.AbstractLifeCycle:com.main.SimpleServer.main(): FAILED org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a0110e keys=-1 selected=-1: java.io.IOException: Unable to establish loopback connection WARN:oejuc.AbstractLifeCycle:com.main.SimpleServer.main():失败org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a0110e keys = -1 selected = -1:java.io.IOException:无法建立回送连接

java.io.IOException: Unable to establish loopback connection java.net.ConnectException: Connection refused: connect java.io.IOException:无法建立回送连接java.net.ConnectException:连接被拒绝:connect

My code looks like this: 我的代码如下所示:

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);
    }
}

and

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

my pom.xml looks like: 我的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>

This means something about your localhost loopback is either misconfigured (such as reporting as a non loopback IP address), or being prevented from being used by something (most common cause being microsoft windows policy decisions and firewall rules). 这意味着有关本地主机回送的信息配置错误(例如,报告为非回送IP地址),或者被某些东西阻止使用(最常见的原因是Microsoft Windows策略决策和防火墙规则)。

Less common is a machine that does not have IPv4 available (only IPv6). 较不常见的是没有可用IPv4(仅IPv6)的计算机。

Try compiling and running this... 尝试编译并运行它...

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();
        }
    }
}

This should list all variations of Network Interfaces on your machine. 这应该列出您计算机上网络接口的所有变体。 If you have an error or exception you will need to address that first, before you can start Jetty on that machine. 如果您有错误或异常,则必须先解决该问题,然后才能在该计算机上启动Jetty。

On a normal machine you see the following output: 在普通计算机上,您将看到以下输出:

[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)

This shows me that all 3 choices: loopback, localhost, and 0.0.0.0 (any interface) work as possible listeners for Jetty. 这向我展示了所有3个选择:回送,本地主机和0.0.0.0(任何接口)都可以作为Jetty的侦听器。

Lastly, upgrade to final non-RC Jetty 9.0.0.v20130308 . 最后,升级到最终的非RC Jetty 9.0.0.v20130308

Jetty server was configured and working for me. 已配置Jetty服务器并为我工作。 on one fine day it start giving "Unable to establish loopback connection" error. 好的一天,它会开始显示“无法建立回送连接”错误。 I have restated my machine and it starts working again .So I think this error is totally related to windows operating system. 我已经重新整理了机器,然后再次开始工作。因此,我认为此错误与Windows操作系统完全相关。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM