2013-08-28 29 views
0

我有一個servlet,它的init方法必須對自己進行一些HTTP調用。這是因爲我使用的是嵌入式應用程序,它啓動並且它是主界面,它是一個RESTful API。我不能也不真的想要使用內部類,因爲它們沒有記錄並且很難使用。所以我希望通過本地HTTP使用REST API。如何在init方法中獲得servlet的本地映射?

因此,我擴展了應用程序附帶的servlet,並修改了init方法,以便啓動一個線程,並對其本身執行一些HTTP調用。目前我硬連線「http://localhost:port/servlet/mapping/」作爲路徑,但我想有一些動態的東西,至少可以檢測端口號和映射。

有沒有什麼體面的方式來做到這一點?我發現很多從HttpServletRequest對象中提取信息的示例,但是在init方法中沒有它。你所擁有的是ServletContext

啊,順便說一句,我使用servlet API 3.0。

+1

你對自己進行HTTP調用究竟意味着什麼? servlet容器將不會使servlet可用於HTTP調用,直到它的init()方法完成爲止 – morgano

+0

如果仔細閱讀,我寫了「所以我啓動了一個執行HTTP調用的線程」。 init方法將在啓動線程後終止,並且線程將繼續執行請求。 – gotch4

回答

0

在Servlet中3,你可以做到這一點,以獲得當前映射爲一個給定的servlet:

String servletName = servletConfig.getServletName(); 
ServletRegistration reg = servletConfig.getServletContext().getServletRegistration(servletName); 
for(String mapping: reg.getMappings()) { 
    // Do something with the mapping 
} 

關於端口號,鑑於在多個端口Servlet容器,可以「聽」,即使只有一個,也沒有標準的方法可以知道端口號。