gpt4 book ai didi

java - Jetty 服务器未启动 : Unable to establish loopback connection

转载 作者:行者123 更新时间:2023-11-29 09:04:41 25 4
gpt4 key购买 nike

所以我正在尝试设置一个嵌入式 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(): FAILED org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a0110e keys=-1 selected=-1: java.io.IOException: Unable to establish loopback connection

java.io.IOException: Unable to establish loopback connectionjava.net.ConnectException: Connection refused: connect

我的代码是这样的:

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>

最佳答案

这意味着您的本地主机环回配置错误(例如报告为非环回 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();
}
}
}

这应该会列出您机器上网络接口(interface)的所有变体。如果您遇到错误或异常,您需要先解决该问题,然后才能在该机器上启动 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)

这向我展示了所有 3 个选择:loopback、localhost 和 0.0.0.0(任何接口(interface))作为 Jetty 的可能听众。

最后,升级到final non-RC Jetty 9.0.0.v20130308 .

关于java - Jetty 服务器未启动 : Unable to establish loopback connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com