【问题标题】:How do I find the URL of my web service?如何找到我的 Web 服务的 URL?
【发布时间】:2011-02-03 22:44:36
【问题描述】:

我知道这似乎是一个愚蠢的问题,但我无法找到有关此问题的任何信息。 我有一个 java web 服务(使用 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 就会改变)

【问题讨论】:

    标签: java url service


    【解决方案1】:

    在我看来更容易,例如:

    @GET
    public URI redirectSendMail(@Context UriInfo ui) {
      return ui.getBaseUri();
    }
    

    如果我们想向客户端发送一个字符串,指示某些资源的确切路径,我们可能想要这样的东西。

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

    【讨论】:

      【解决方案2】:

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

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

        String hostname = request.getRequestHeader("Host");

      【讨论】:

      • 我目前已将其设置为从配置文件中读取 URL。我正在尝试删除此配置设置,因为我认为查找主机 URL 应该很容易。
      • 如果您真的想要零服务器端配置,您将需要使用 HTTP 请求中的“主机”标头。
      • Uriah,我无法从“主机”标头中获取该 URL。如果您可以显示代码,请告诉我。谢谢。
      • 如果 wiki 正确... getRequestHeader("Host") 也可能包含端口号 en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_fields
      【解决方案3】:

      在您的网络服务类中添加以下属性。

      @Resource    
      private WebServiceContext wsCtxt;
      

      现在下面的代码 sn-p 将为您提供您正在寻找的值:

          MessageContext msgCtxt = wsCtxt.getMessageContext();
          HttpServletRequest request =
              (HttpServletRequest)msgCtxt.get(MessageContext.SERVLET_REQUEST);
      
          String hostName = request .getServerName();
          int port = request .getServerPort();
      

      要检查调用 Web 服务的位置,请使用以下代码。

          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;
      

      【讨论】:

      【解决方案4】:

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

      <servlet-mapping>
      <servlet-name>Jersey REST Service</servlet-name>
      <url-pattern>/rest/*</url-pattern>
      </servlet-mapping>   
      

      而 YYY 是由您的 web 服务的 @Path() 参数定义的路径,因此在本示例中,它类似于:

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

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

      【讨论】:

      • 我认为我说得不够清楚,所以我会尝试重新提出这个问题。我知道我的 Web 服务的 URL,因为我正在部署它。问题是,我如何以编程方式获取该 URL。所以在 MyWebservice.java 类中,我想知道我的 Web 服务已部署到的 URL(在本例中是“localhost:8080/MyService”,但是一旦 Web 服务部署到生产服务器上,这将改变)。跨度>
      【解决方案5】:

      可以在您的 wsdl 文件中找到:

      因此:http://localhost:8080/TestSOAPWebservice/services/TestClassImpl?wsdl 将是您的 wsdl 文件的 url。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 2019-08-07
        • 1970-01-01
        相关资源
        最近更新 更多