泽西Grizzly REST服务在localhost外部不可见

use*_*250 27 rest glassfish jax-rs ip-address jersey

我正在尝试使用Jersey和Glassfish Grizzly在java中编写REST服务.我有一个非常简单的内部工作案例,但似乎无法从外部地址调用服务器.我尝试过使用外部可见IP的各种不同的机器对,并尝试在服务器中指定实际的IP地址而不是localhost,但没有任何作用.我有点松散地遵循这里的官方用户指南.我的资源:

package resources;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/simpleREST")
public class SimpleRESTResource
{
    @GET
    @Produces("text/plain")
    public String getMessage()
    {
        return "Message from server\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

和服务器:

import java.io.IOException;
import java.net.URI;

import javax.ws.rs.core.UriBuilder;

import org.glassfish.grizzly.http.server.HttpServer;

import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;


public class Main
{
    public static final URI BASE_URI = UriBuilder.fromUri("http://localhost").port(9998).build();

    public static void main(String[] args) throws IOException
    {
        System.out.println("Starting grizzly...");
        ResourceConfig rc = new PackagesResourceConfig("resources");
        HttpServer myServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
        System.out.println(String.format("Jersey app started with WADL available at %s/application.wadl\n" +
                "Try out %s/simpleREST\nHit enter to stop it...", BASE_URI, BASE_URI));
        System.in.read();
        myServer.stop();
    }
}
Run Code Online (Sandbox Code Playgroud)

在同一台机器上,我可以使用成功与服务器进行交互

curl -X GET localhost:9998/simpleREST
Run Code Online (Sandbox Code Playgroud)

要么

curl -X GET [external numeric address]:9998/simpleREST
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议.


我已经通过设置服务器URI来修复这个问题http://0.0.0.0:9998,而不是localhost,127.0.0.1或实际地址.

小智 1

或者,您可以尝试以下代码:

    ResourceConfig rc = new PackagesResourceConfig("your-rest-packages");
    HttpHandler handler = ContainerFactory.createContainer(HttpHandler.class, rc);
    server = new HttpServer();
    server.getServerConfiguration().addHttpHandler(handler);
    //attach listeners

    InetAddress localHost = InetAddress.getLocalHost();
    String localHostAddr = localHost.getHostAddress();
    NetworkListener localHostListener = new NetworkListener("localhost", localHostAddr, port);
    server.addListener(localHostListener);
    InetAddress loopback = InetAddress.getLoopbackAddress();
    String loopbackAddr = loopback.getHostAddress();
    NetworkListener loopbackListener = new NetworkListener("loopback", loopbackAddr, port);
Run Code Online (Sandbox Code Playgroud)

现在你的服务器可以列出本地主机和环回