我希望能夠靜態(或全局地)訪問我自己的應用程序的URL,也就是我想知道根上下文路徑的URL,因此對於如果是比如在:如何知道Servlet應用程序中的Web應用程序URL
http://example.com/contextroot/
我希望能夠得到我的應用程序的任何部分信息。所以我想在應用程序初始化後我必須獲得這些信息,我的直覺告訴我它在偵聽器或Servlet攔截器中的某個位置,但我不確定我可以在哪裏存儲這些信息,例如Singleton。
我希望能夠靜態(或全局地)訪問我自己的應用程序的URL,也就是我想知道根上下文路徑的URL,因此對於如果是比如在:如何知道Servlet應用程序中的Web應用程序URL
http://example.com/contextroot/
我希望能夠得到我的應用程序的任何部分信息。所以我想在應用程序初始化後我必須獲得這些信息,我的直覺告訴我它在偵聽器或Servlet攔截器中的某個位置,但我不確定我可以在哪裏存儲這些信息,例如Singleton。
我幾年前做過類似的事情。 但是有一點邏輯涉及。
每
request.getRequestURL()
你其實可以得到您的應用程序的完整路徑,但如果你這樣做在servlet中,你的結果會是這樣的。
http://<server:port>/<contextname>/<servletName>
我所做的只是解析字符串,並用空字符串替換servletName。
爲了使這個全局可用,我使用了servlets上下文屬性。
getServletContext().setAttribute(key, value)
在Servlet中,您可以通過上下文對象全局訪問它們。
在JSP中,我曾使用JSTL和訪問這樣
${applicationScope.key}
我覺得可能是更好的選擇,要做到這一點,但是這已經爲我
請注意,這取決於給定的請求,由客戶端,所以你基本上不能依靠這些信息.. – lunatikz
Web應用程序沒有定義工作主機和端口本身,它定義上下文根和上下文根中可用的所有資源。該主機和端口的服務器配置的一部分,而不是可以通過任何Servlet API的其他不是通過請求對象使用這種方法的入站請求的一部分:
HttpServletRequest.getRequestURL()
ServletRequest.getLocalName()
ServletRequest.getLocalPort()
如果你不希望建立一個變量作爲請求的一部分,另一個選項是ServletContextListener - 您可以在contextInitialized方法中設置ServletContext屬性,但您需要從其他方式讀取主機名和端口。
ServelRequest.getServletContext().geAttribute()
你的意思是像使用'@RequestMapping(值= 「/上下文根」,方法= RequestMethod.GET)':請求可以使用獲得的屬性? –
@HassanAlBourji我從來沒有提到過Spring MVC,我使用普通Servlets – MichelReap
也是我想要的是完整的URL,如協議://域/上下文 – MichelReap