2015-12-16 38 views
2

我希望能够静态(或全局地)访问我自己的应用程序的URL,也就是我想知道根上下文路径的URL,因此对于如果是比如在:如何知道Servlet应用程序中的Web应用程序URL

http://example.com/contextroot/

我希望能够得到我的应用程序的任何部分信息。所以我想在应用程序初始化后我必须获得这些信息,我的直觉告诉我它在侦听器或Servlet拦截器中的某个位置,但我不确定我可以在哪里存储这些信息,例如Singleton。

+0

你的意思是像使用'@RequestMapping(值= “/上下文根”,方法= RequestMethod.GET)':请求可以使用获得的属性? –

+0

@HassanAlBourji我从来没有提到过Spring MVC,我使用普通Servlets – MichelReap

+0

也是我想要的是完整的URL,如协议://域/上下文 – MichelReap

回答

1

我几年前做过类似的事情。 但是有一点逻辑涉及。

request.getRequestURL() 

你其实可以得到您的应用程序的完整路径,但如果你这样做在servlet中,你的结果会是这样的。

http://<server:port>/<contextname>/<servletName> 

我所做的只是解析字符串,并用空字符串替换servletName。

为了使这个全局可用,我使用了servlets上下文属性。

getServletContext().setAttribute(key, value) 

在Servlet中,您可以通过上下文对象全局访问它们。

在JSP中,我曾使用JSTL和访问这样

${applicationScope.key} 

我觉得可能是更好的选择,要做到这一点,但是这已经为我

+1

请注意,这取决于给定的请求,由客户端,所以你基本上不能依靠这些信息.. – lunatikz

0

Web应用程序没有定义工作主机和端口本身,它定义上下文根和上下文根中可用的所有资源。该主机和端口的服务器配置的一部分,而不是可以通过任何Servlet API的其他不是通过请求对象使用这种方法的入站请求的一部分:

HttpServletRequest.getRequestURL() 
ServletRequest.getLocalName() 
ServletRequest.getLocalPort() 

如果你不希望建立一个变量作为请求的一部分,另一个选项是ServletContextListener - 您可以在contextInitialized方法中设置ServletContext属性,但您需要从其他方式读取主机名和端口。

ServelRequest.getServletContext().geAttribute() 
相关问题