如何在Servlet应用程序中了解Web应用程序URL

时间:2015-12-16 09:26:03

标签: java servlets

我希望能够静态地(或以某种方式全局地)访问我自己的应用程序的URL,也就是说,我想知道根上下文路径的URL,例如,如果它在:

http://example.com/contextroot/

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

2 个答案:

答案 0 :(得分:1)

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

Per

request.getRequestURL()

您实际上可以获得应用程序的完整路径,但如果您在servlet中执行此操作,则结果将是这样的。

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

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

为了使全局可用,我使用了servlet上下文属性。

getServletContext().setAttribute(key, value)

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

在jsp中,我使用过jstl并以这种方式访问​​

${applicationScope.key}

我认为可能有更好的选择,但这对我有用

答案 1 :(得分:0)

Web应用程序没有为自己定义主机和端口,它定义了上下文根和上下文根目录下可用的所有资源。主机和端口是服务器配置的一部分,除了通过请求对象使用以下方法作为入站请求的一部分之外,不能通过任何servlet api获得:

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

如果您不想将变量设置为请求的一部分,则另一个选项是ServletContextListener - 您可以在contextInitialized方法中设置ServletContext属性,但您需要从其他方式读取主机名和端口。请求可以使用以下命令获取属性:

ServelRequest.getServletContext().geAttribute()