我的Java Web應用程序包含一個啓動servlet。當Web應用程序服務器(Tomcat)啓動時,將調用其init()
方法。在這種方法中,我需要我的Web應用程序的URL。由於沒有HttpServletRequest
,如何獲取此信息?如何從內部識別Java Web應用程序的URL?
3
A
回答
1
這裏是如何對我的作品,也許對於大多數配置:
public static String getWebappUrl(ServletConfig servletConfig, boolean ssl) {
String protocol = ssl ? "https" : "http";
String host = getHostName();
String context = servletConfig.getServletContext().getServletContextName();
return protocol + "://" + host + "/" + context;
}
public static String getHostName() {
String[] hostnames = getHostNames();
if (hostnames.length == 0) return "localhost";
if (hostnames.length == 1) return hostnames[0];
for (int i = 0; i < hostnames.length; i++) {
if (!"localhost".equals(hostnames[i])) return hostnames[i];
}
return hostnames[0];
}
public static String[] getHostNames() {
String localhostName;
try {
localhostName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException ex) {
return new String[] {"localhost"};
}
InetAddress ia[];
try {
ia = InetAddress.getAllByName(localhostName);
} catch (UnknownHostException ex) {
return new String[] {localhostName};
}
String[] sa = new String[ia.length];
for (int i = 0; i < ia.length; i++) {
sa[i] = ia[i].getHostName();
}
return sa;
}
5
你不能。因爲「從內部」沒有「Java Web應用程序的URL」。一個servlet不綁定到一個URL,這是從外部完成的。 (也許你有一個連接到Tomcat的Apache服務器--Tomcat無法知道它) 問一個HttpServletRequest的URL是很有意義的,因爲我們正在講述一個事件的信息(URL是實際上用於生成此請求),請求配置 URL是沒有意義的。
1
解決方法是在第一個請求到達時執行初始化。您可以實現一次這樣做的過濾器,例如通過將boolean
標誌存儲在靜態變量中並正確地同步對標誌的訪問。但它意味着一點開銷,因爲每個後續請求都會通過過濾器,然後繞過初始化。只是一個想法。
1
在servlet API中沒有提供這些信息的東西,再加上任何給定的資源都可能綁定到多個URL。
你能做什麼,是當你收到一個實際的請求時檢查servlet上下文並查看使用了哪個URL。
相關問題
- 1. 識別Java類的Java應用程序
- 2. 如何部署Java Web應用程序
- 3. 內部Web應用程序
- 4. 如何從2007年識別和構建JBoss Java應用程序?
- 5. 如何從Java Swing應用程序中識別顯示器?
- 6. 如何從應用程序內識別heroku dyno號碼?
- 7. 如何識別調用Web服務的應用程序
- 8. 如何從Java Web應用程序啓動Android應用程序?
- 9. 識別java程序
- 10. java web服務:如何識別用戶
- 11. URL匹配在Java Web應用程序
- 12. Web應用程序URL訪問java
- 13. 如何從其他IE窗口識別特定的ASP Web應用程序?
- 14. 網站內部的Web應用程序
- 15. 從Android應用程序中識別GoogleTv
- 16. 面部識別程序如何工作?
- 17. 如何開發面部識別iPhone應用程序?
- 18. Java web應用程序 - 部署描述符 - URL模式映射
- 19. 增量部署java web應用程序
- 20. 如何描述我的web應用程序的內部工作
- 21. 從Java桌面應用程序識別機器?
- 22. Java Web應用程序內存處理
- 23. Web應用程序如何通過代碼識別點擊是否來自另一個Web應用程序?
- 24. 如何在java web應用程序中創建虛榮URL?
- 25. 如何在java web應用程序中重寫url?
- 26. 從Java Web應用程序取消部署的調用方法
- 27. 如何將Netbeans上的Java Web應用程序部署到AWS?
- 28. 如何識別用戶對隨後的asp.net mvc web應用程序的請求
- 29. 在Web應用程序中識別用戶的最佳方法
- 30. 如何正確管理Eclipse內部的Tomcat Web應用程序?
你不能。你需要什麼?請詳細說明功能要求,而不是詢問如何實現您認爲它是正確的解決方案的解決方案,但這可能不是正確的解決方案。也許這個要求反過來可以合理地回答。 – BalusC 2010-06-29 11:51:43
我想發送一封包含網絡應用程序URL的電子郵件。 至少,上下文路徑會很好。 – Witek 2010-06-29 13:59:17