我有一個web應用程序。無論何時部署,都會啓動一個servlet。一旦servlet啓動,它必須將自己註冊爲一個回調url到外部服務以取回一些通知。註冊一個回調可能只是一個簡單的POST請求,通過請求正文中的回調url進行外部服務。 我搜索了很多,但無法找到如何在servlet中構造回調URL的任何方法。
例如如果應用程序部署爲協議:// ABCD:XXXX和servlet路徑是/myservlet然後回調URL將成爲協議:// ABCD:XXXX/myservlet
我不知道如何讓名稱IP地址(ABCD)和端口號(XXXX)在servlet代碼中。任何人都可以幫忙嗎?
請注意,應該在servlet啓動後儘快完成,可能在init()中,因此我沒有HTTPServletRequest對象來獲取此信息。在servlet中獲取當前的應用程序url
2
A
回答
1
除非請求正在進行,否則您正在查找的信息無法通過Servlet API訪問。單個容器可能具有容器特定的API,使您可以執行此操作,但您生產的任何內容都不可移植。
-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());
}
-1
我相信servlet的URL映射始終是固定的!因爲你已經在web.xml中發佈了這個文件。
如果它不是固定的,你可以從classpath中讀取web.xml並獲取它。
[以下是如何讀個XML]在java中
還有以後你可以用@ ColdHack的回答來獲取服務器的IP。
現在您已經擁有IP和servlet名稱,您可以構建URL並將其發佈到外部服務。
您可以在上下文偵聽器中執行所有這些操作,每次啓動時都會自行註冊。
+0
它更像是一種簡單的解決方法 –
相關問題
- 1. 在Web應用程序中獲取當前URL
- 2. 如何獲取Python uwsgi應用程序的當前URL?
- 3. 從當前請求獲取應用程序url
- 4. 如何獲取Rails應用程序的URL ...不是當前控制器的URL
- 5. 在Web應用程序的web.xml中獲取當前域
- 6. 如何在C#中獲取當前應用程序的名稱
- 7. 在web應用程序中獲取當前窗口用戶
- 8. 獲取當前URL
- 9. 獲取當前URL
- 10. 獲取當前URL
- 11. 獲取當前URL在Python
- 12. 擴展程序獲取當前打開的應用程序
- 13. Angular 2 - 如何獲取應用程序組件中的當前url
- 14. 如何在Django中獲取當前應用程序
- 15. 如何在android應用程序中獲取當前位置
- 16. 在黑莓應用程序中從GPS獲取當前位置
- 17. 在Windows 8中獲取當前路徑WPF應用程序
- 18. 在.NET web應用程序中獲取當前目錄
- 19. 在MVC 3應用程序中獲取當前文化
- 20. 在Xamarin Forms應用程序中獲取當前頁面名稱
- 21. 在Qt應用程序中獲取當前工作目錄
- 22. 如何獲取當前在辦公室的應用程序當前運行的應用程序的名稱2013
- 23. 獲取當前前臺應用程序的名稱
- 24. 獲取當前URL(UIWebView的)
- 25. Python:獲取當前的URL
- 26. 如何獲取MFC中的應用程序當前路徑(VC++)?
- 27. 如何獲取WatchKit應用程序中的當前位置?
- 28. 從C#應用程序獲取WindowsExplorer中的當前選擇?
- 29. 獲取Android應用程序中的當前活動
- 30. 獲取當前頁面的PDF在Windows應用程序
Servlet通常不能知道它運行的主機是什麼(也可能不應該)。國際海事組織,你需要一些外部配置。 –
如果沒有請求,你如何獲得該請求的URL?正如Sotirios所說,沒辦法。 –
請注意,如果您希望代碼在容器啓動後儘快運行,那麼您可以使用ServletContextListner,而不是servlet的init方法。如果該servlet是實例化的,那麼只會調用該init。更多信息http://stackoverflow.com/questions/13819773/how-to-run-specific-java-code-on-tomcat-start-or-on-application-deploy – polypiel