Java Jetty服务器未启动:无法建立环回连接
因此,我试图设置一个嵌入式jetty 9服务器。然而,当我尝试: mvn干净编译执行器:java 执行暂停在: 信息:oejs.Server:com.main.SimpleServer.main():jetty-9.0.0.RC2 过了一段时间,我得到了如下异常: 警告:oejuc.AbstractLifeCycle:com.main.SimpleServer.main():失败的org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a0110ekeys=-1 selected=-1:java.io.IOException:无法建立环回连接 java.io.IOException:无法建立环回连接 java.net.ConnectException:连接被拒绝:连接 我的代码如下所示:Java Jetty服务器未启动:无法建立环回连接,java,jetty,Java,Jetty,因此,我试图设置一个嵌入式jetty 9服务器。然而,当我尝试: mvn干净编译执行器:java 执行暂停在: 信息:oejs.Server:com.main.SimpleServer.main():jetty-9.0.0.RC2 过了一段时间,我得到了如下异常: 警告:oejuc.AbstractLifeCycle:com.main.SimpleServer.main():失败的org.eclipse.jetty.io.SelectorManager$ManagedSelector@45a01
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);
}
}
我的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.0.0
试验码头
试验码头
0.0.1-快照
9.0.0.RC2
org.eclipse.jetty
jetty服务器
${jettyVersion}
org.eclipse.jetty
码头腹板箱
7.4.4.v20110707
org.eclipse.jetty
码头
${jettyVersion}
javax.servlet
servlet api
3.0-α-1
org.eclipse.jetty
jetty maven插件
${jettyVersion}
org.codehaus.mojo
execmaven插件
1.1
JAVA
com.main.SimpleServer
这意味着您的本地主机环回配置错误(例如报告为非环回IP地址),或者被某些东西阻止使用(最常见的原因是microsoft windows策略决策和防火墙规则)
不太常见的是没有可用IPv4(仅IPv6)的计算机
尝试编译并运行此
package stackoverflow.jetty;
导入java.net.InetAddress;
导入java.net.InetSocketAddress;
导入java.net.NetworkInterface;
导入java.net.SocketException;
导入java.util.Collections;
导入java.util.Enumeration;
导入java.util.List;
公共类AddrList
{
公共静态void main(字符串[]args)
{
尝试
{
InetAddress loopback=InetAddress.getLoopbackAddress();
转储(“环回”,环回);
}
捕获(可丢弃的t)
{
System.out.println(“无法获取LoopbackAddress()”;
t、 printStackTrace();
}
尝试
{
InetAddress localhost=InetAddress.getLocalHost();
转储(“LocalHost”,LocalHost);
}
捕获(可丢弃的t)
{
System.out.println(“无法获取localhost()”;
t、 printStackTrace();
}
尝试
{
InetAddress alladdr=InetAddress.getByName(“0.0.0.0”);
转储(“0.0.0.0”,alladdr);
}
捕获(可丢弃的t)
{
System.out.println(“无法获取localhost()”;
t、 printStackTrace();
}
尝试
{
枚举网络=NetworkInterface.getNetworkInterfaces();
用于(网络接口iface:Collections.list(网络))
{
尝试
{
System.out.println(“DisplayName=“+iface.getDisplayName());
System.out.println(“Name=“+iface.getName());
List addrs=Collections.List(iface.getInetAddresses());
int i=0;
用于(InetAddress地址:地址)
{
dump(Integer.toString(i++),addr);
}
}
捕获(可丢弃的t)
{
System.out.println(“无法为NetworkInterface创建InetAddress:+iface.getDisplayName());
t、 printStackTrace();
}
}
}
捕获(SocketException e)
{
系统输出打印(“无法获取所有网络接口”);
e、 printStackTrace();
}
}
公共静态无效转储(字符串类型,InetAddress addr)
{
字符串头=String.format(“[%s]InetAddress”,类型);
尝试
{
System.out.println(标题+“=”+addr);
System.out.println(header+”.isAnyLocalAddress=“+addr.isAnyLocalAddress());
System.out.println(header+”.isLinkLocalAddress=“+addr.isLinkLocalAddress());
System.out.println(header+”.isLoopbackAddress=“+addr.isLoopbackAddress());
}
捕获(可丢弃的t)
{
System.out.printf(“[%s]未能列出InetAddress详细信息%n”,类型);
t、 printStackTrace();
}
尝试
{
header=String.format(“[%s]InetSocketAddress”,类型);
InetSocketAddress isockaddr=新的InetSocketAddress(addr,8080);
System.out.println(标题+“=”+isockaddr);
System.out.println(header+”.isUnresolved=“+isockaddr.isUnresolved());
}
捕获(可丢弃的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)
这向我展示了所有3个选项:环回、localhost和0.0.0.0(任何接口)
尽可能地为Jetty做听众
最后,升级到。Jetty服务器已配置并为我工作。在晴朗的一天,它开始出现“无法建立环回连接”错误。我重申了我的机器,它又开始工作了。所以我认为这个错误完全与windows操作系统有关。这可能是防火墙问题吗?看:不,看起来真的不像。另外,使用jetty 9的jetty WebSocket,不要带
[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)