在servlet中获取当前应用程序URL

时间:2013-10-02 13:39:29

标签: java servlets

我有一个网络应用程序。无论何时部署,都会启动servlet。一旦servlet启动,它必须将自己注册为外部服务的回调URL以获取一些通知。注册回调可能只是对请求体中具有回调URL的外部服务的简单POST请求。 我搜索了很多但是找不到任何关于如何在servlet中构造回调url的方法。 例如
如果应用程序部署为 protocol:// ABCD:XXXX 且servlet路径为 / myservlet ,则回调URL将变为 protocol:// ABCD:XXXX / myservlet < / strong>
我不确定如何在servlet代码中获取 IPaddress (A.B.C.D)和端口号(XXXX)。有人可以帮忙吗?
请注意,它应该在servlet启动后立即完成,可能在init()中,因此我没有HTTPServletRequest对象来获取此信息。

3 个答案:

答案 0 :(得分:1)

除非正在进行请求,否则无法通过Servlet API获取您要查找的信息。单个容器可能具有容器特定的API,使您可以执行此操作,但您生产的内容将无法移植。

答案 1 :(得分:-1)

要获取服务器IP,您可以使用:

public String getServerIpAdd()
    {
        String ipAddr = "";
        try 
        {
            InetAddress inetAddr = InetAddress.getLocalHost();
            byte[] addr = inetAddr.getAddress();
            // Convert to dot representation           
            for (int i = 0; i < addr.length; i++) {
                if (i > 0) {
                    ipAddr += ".";
                }
                ipAddr += addr[i] & 0xFF;
            }            
        } catch (UnknownHostException e) {
            System.out.println("Host not found: " + e.getMessage());
        }
        return ipAddr;
    }

要获取servlet名称,可以在servlet上使用getServletName()

基于this主题,您可以执行此操作以获取服务器端口:

public void doGet(ServletRequest request, ServletResponse response) {
    System.out.println("Host Name = " + request.getServerName());
    System.out.println("Port Number = " + request.getServerPort());
}

答案 2 :(得分:-1)

我相信servlet url映射始终是固定的!因为你已经在web.xml中发布了

如果它没有修复,你可以从类路径中读取web.xml并获取它。

[这里是如何阅读XML]在java

然后您可以使用@ ColdHack的答案来获取服务器IP。

现在您拥有IP和servlet名称,您可以构造URL并将其POST到外部服务。

你可以在上下文监听器中完成所有这些操作,每次启动时都会这样做,它会自行注册。