我希望能够静态地(或以某种方式全局地)访问我自己的应用程序的URL,也就是说,我想知道根上下文路径的URL,例如,如果它在:
http://example.com/contextroot/
我希望能够在我的应用的任何部分获取此信息。所以我想在初始化应用程序之后我必须获取这些信息,我的直觉告诉我它在侦听器或Servlet拦截器之间,但我不确定在哪里可以将这些信息存储在例如Singleton中。
答案 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()