Java 如何从局域网访问jetty服务器?

Java 如何从局域网访问jetty服务器?,java,jetty,localhost,maven-3,lan,Java,Jetty,Localhost,Maven 3,Lan,我正在尝试使用192.168.0.6:8080(a的IP)从局域网上的另一台机器(B)访问一个web应用程序(部署在我的机器(a)上的jetty8),但它不工作。虽然我可以使用192.168.0.5(B的IP)从A访问机器B上AppServ上托管的应用程序 我可以在机器A上的localhost:8080上正常访问应用程序 我可以保证没有网络问题,但由于某些原因,jetty无法通过网络访问。是否有任何特定配置可通过LAN访问 我的应用程序是Maven project,我从eclipse运行它,设置

我正在尝试使用192.168.0.6:8080(a的IP)从局域网上的另一台机器(B)访问一个web应用程序(部署在我的机器(a)上的jetty8),但它不工作。虽然我可以使用192.168.0.5(B的IP)从A访问机器B上AppServ上托管的应用程序

我可以在机器A上的localhost:8080上正常访问应用程序

我可以保证没有网络问题,但由于某些原因,jetty无法通过网络访问。是否有任何特定配置可通过LAN访问


我的应用程序是Maven project,我从eclipse运行它,设置在web.xml和pom.xml中。

以下答案适用于Jetty 8和更早版本(Jetty 9+命令和类名不同)

确保检查正在侦听的接口

示例(来自日志)

这表示服务器只在127.0.0.1(localhost)上侦听 您可以查看日志,也可以在机器a上进行快速测试。 打开web浏览器并测试这两个URL

  • http://localhost:8080/
  • http://192.168.0.6:8080/
如果它在两个URL上都有响应,那么您可能已经正确设置了它,并且需要处理防火墙问题。 如果它对一个接口有效,但对另一个接口无效,那么您只在1个接口上侦听

要让jetty监听所有接口,请使用专用IP 0.0.0.0

$ java -Djetty.host=0.0.0.0 -jar start.jar
2012-08-10 14:53:25.338:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
此时,jetty正在监听您机器上的所有接口

注意:您还可以编辑etc/jetty.xml并永久设置主机

      <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
        <Set name="host">0.0.0.0</Set>
      ...

0.0.0.0
...

所以我点击了这个,在调试了一个下午的奇怪行为之后,我发现Jetty只是在向IPv6广播自己,跳过了IPv4,v4端口被分配给了另一个应用程序


我的解决方案?跳转到另一个端口…

2020-07-20

作为Jetty 9.4.12.v20180830(及以上版本)上@JoakimErdfelt的补充,您可以通过编程方式将主机配置为:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;

    Server server = new Server();       

    ServerConnector httpConnector = new ServerConnector(server);
        httpConnector.setHost("0.0.0.0"); // <--------- !
        httpConnector.setPort(12345);
        httpConnector.setIdleTimeout(5000);
        server.addConnector(httpConnector);
import org.eclipse.jetty.server.server;
导入org.eclipse.jetty.server.ServerConnector;
服务器=新服务器();
ServerConnector httpConnector=新的ServerConnector(服务器);

httpConnector.setHost(“0.0.0.0”);//你到底是如何启动jetty的?在eclipse中,或者使用mvn jetty:run?@StefanFerstl,我已经将mvn jetty:run添加到eclipse运行配置中。因此,我可以从eclipse运行该项目,eclipse将运行jetty。然后我可以在本地主机上本地访问应用程序:8080/AppName您运行的操作系统是什么?您是否有任何防火墙设置可能会阻止端口的可见性?@Edmon我有windows7。。我关闭了windows防火墙,但它不工作。我无法在Win7上重现您的问题。如果防火墙真的关闭了,你能看看“网络和共享中心”吗?我只能访问
http://localhost:8080
。我使用了
mvnjetty:run-Djetty.host=0.0.0.0
来运行jetty,它运行并获得了您提到的日志
SelectChannelConnector@0.0.0.0:8080
。但仍然无法访问
http://192.168.0.6:8080
。。还有什么可能导致这个问题?。。我在本地尝试过。如果你无法访问并且你有SelectChannelConnector@0.0.0.0:8080输出,则该计算机上没有192.168.0.6作为网络接口。试着从java运行一个测试,看看它是否能找到那个网络接口。我运行了这段代码,这是我得到的一部分:
Display name:Intel(R)Centrino(R)Advanced-N 6205 name:net5 InetAddress:/192.168.0.6 InetAddress:/fe80:0:0:0:c739:e32:3450:159f%19
当Jetty从eclipse自动启动时,您如何配置它?(作为web应用程序运行)注意:在使用Google App Engine的Android Studio中,您必须编辑文件.iml。将行
更改为
,这不是问题中发布的问题的解决方案,因为询问者明确表示Jetty可以通过IPv4从本地主机访问。不,他没有。他说他可以从机器A上的localhost:8080访问它,它可以(通常)同时被别名为IPv4(127.0.0.1)和IPv6(::1)子集。事实上,许多客户机和jetty将从一个级联到另一个,而不告诉您哪个在使用中/哪个已失败,这在很大程度上影响了问题的解决。最有可能的情况是,A上的127.0.0.1:8080被锁定,但他的::1:8080没有锁定,jetty正在使用后者。好吧,听起来确实有道理。
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;

    Server server = new Server();       

    ServerConnector httpConnector = new ServerConnector(server);
        httpConnector.setHost("0.0.0.0"); // <--------- !
        httpConnector.setPort(12345);
        httpConnector.setIdleTimeout(5000);
        server.addConnector(httpConnector);