Java 如何找到web服务的URL?

Java 如何找到web服务的URL?,java,url,service,Java,Url,Service,我知道这似乎是一个愚蠢的问题,但我就是找不到关于这个问题的任何信息。 我有一个JavaWeb服务(使用NetBeans生成),在web服务类中,我想知道部署web服务的URL。 例如,如果我正在本地glassFish服务器上部署web服务,则web服务可在“http://localhost:8080/MyService/其中“MyService”是我的服务的名称。 我之所以需要知道这个URL,是因为我的web服务生成了一些我需要在这个URL上使用的文件。例如,web服务调用返回一个URL“htt

我知道这似乎是一个愚蠢的问题,但我就是找不到关于这个问题的任何信息。 我有一个JavaWeb服务(使用NetBeans生成),在web服务类中,我想知道部署web服务的URL。 例如,如果我正在本地glassFish服务器上部署web服务,则web服务可在“http://localhost:8080/MyService/其中“MyService”是我的服务的名称。 我之所以需要知道这个URL,是因为我的web服务生成了一些我需要在这个URL上使用的文件。例如,web服务调用返回一个URL“http://localhost:8080/MyService/report.html" 我找到了一些关于“WebServiceContext”的链接,但我无法获取运行web服务的URL

编辑


澄清一下:在MyWebService.java类中,我想找出部署web服务的URL(在本例中,我的web服务运行在“http://localhost:8080/MyService/“,但一旦它部署到生产服务器上,此URL将更改)

希望我能够帮助您,我最近刚开始使用webservices(Jersey REST),我发现您的端点的url是: 'http://localhost:8080/MyService/XXX/YYY“
其中XXX=web.xml文件(如下面的文件)中servlet映射中的URL模式


泽西岛休息服务
/休息/*
YYY是由webservice的@path()参数定义的路径,因此在本例中,它类似于:

"http://localhost:8080/MyService/rest/myPathDefinition"


另一件需要注意的事情是,实际上您可以在eclipse中更改web上下文根,尽管它将默认为Java项目的名称。如果您需要进一步的澄清,或者这没有帮助,请告诉我/有人可以对此进行扩展。

如果您询问如何查找servlet容器正在侦听的主机名(例如“localhost”或“www.example.com”),您有几个选项:

  • 添加在部署时设置的配置点(例如,配置文件、系统属性)
  • 查看您的servlet容器是否通过JMX公开任何“虚拟主机”配置或读取其配置文件(例如)
  • 找到服务器的IP地址并进行DNS查找以获取其配置的主机名
  • 检查传入HttpServletRequest的“主机”标头

    String hostname=request.getRequestHeader(“主机”)


    • 在我看来更容易,例如:

      @GET
      public URI redirectSendMail(@Context UriInfo ui) {
        return ui.getBaseUri();
      }
      
      如果我们想向客户机发送一个字符串,指示某个资源的确切路径,我们可能需要这样的内容

      @GET
      public String getResourcePath(@Context UriInfo ui) {
        return ui.getAbsolutePath();
      }
      

      在webservice类中添加以下属性

      @Resource    
      private WebServiceContext wsCtxt;
      
      现在,下面的代码片段将为您提供要查找的值:

          MessageContext msgCtxt = wsCtxt.getMessageContext();
          HttpServletRequest request =
              (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST);
      
          String hostName = request .getServerName();
          int port = request .getServerPort();
      
      要检查调用webservice的位置,请使用以下代码

          String clientIP = request .getRemoteAddr();
      
      相关进口如下:

      import javax.annotation.Resource;
      
      import javax.servlet.http.HttpServletRequest;
      
      import javax.xml.ws.WebServiceContext;
      import javax.xml.ws.handler.MessageContext;
      
      import weblogic.jws.Context;
      
      import weblogic.wsee.jws.JwsContext;
      

      它可以在您的wsdl文件中找到,如下所示:


      因此:将是您的wsdl文件的url。

      我想我说得不够清楚,所以我将尝试重新表述这个问题。我知道我的web服务的URL,因为我正在部署它。问题是,如何通过编程获得该URL。因此,在MyWebservice.java类中,我想知道部署web服务的URL(在本例中,它是“”,但一旦将web服务部署到生产服务器上,它就会改变)。我当前已将其设置为从配置文件读取URL。我正在尝试删除此配置设置,因为我认为查找主机URL应该很容易。如果您确实想要零服务器端配置,则需要使用HTTP请求中的“主机”标头。Uriah,我无法从“主机”标头获取该URL。如果你能显示代码,请让我知道。谢谢。如果维基是对的。。。getRequestHeader(“主机”)也可能包含端口号。在某些情况下,@Resource似乎会返回null。。。请看这里:
      import javax.annotation.Resource;
      
      import javax.servlet.http.HttpServletRequest;
      
      import javax.xml.ws.WebServiceContext;
      import javax.xml.ws.handler.MessageContext;
      
      import weblogic.jws.Context;
      
      import weblogic.wsee.jws.JwsContext;