如何以编程方式获取部署地址?

How to get deployed address programmatically?

我有以下应用程序 URI 结构:

ip:port/applicationName/someAction

如何以编程方式获取 URI 的以下部分:

ip:port/applicationName/

我试过了

servletContext.getContext()

但它 returns 仅 applicationName

P.S.

这个有效

String applicationBasePath = request.getRequestURL().substring(0,request.getRequestURL().indexOf("/",request.getRequestURL().indexOf("/")+2));

还有这个:

request.getRequestURL().substring(0, request.getRequestURL().indexOf(request.getRequestURI()))

但是我不喜欢。

我相信您需要获取 HttpServletRequest,然后您可以从 getRequestURL() 中提取该信息。

servlet 上下文的问题仅在于您的应用程序可以访问,例如通过 http://127.0.0.1/http://192.168.1.1/,如果没有完成实际请求,您将不知道这一点。如果你可以定义任何 "canonical" 服务器名称,你可以这样做,例如喜欢这里:Getting server name during servlet initialization

即。 String serverName = getServletContext().getInitParameter("serverName"); 定义了初始参数。

我不能写出比以下更好的代码:

    public static String getApplicationBasePath(HttpServletRequest request) {
        String absolutePath = request.getRequestURL().toString();
        String contextPath = request.getRequestURI().toString();
        return absolutePath.substring(0,absolutePath.indexOf(contextPath));
    }