Java: String representation of just the host, scheme, possibly port from servlet request

后端 未结 5 1757
天命终不由人
天命终不由人 2021-01-04 22:08

I work with different servers and configurations. What is the best java code approach for getting the scheme://host:[port if it is not port 80].

Here is some code I

相关标签:
5条回答
  • 2021-01-04 22:43
    URI u=new URI("http://www.google.com/");
    String s=u.getScheme()+"://"+u.getHost()+":"+u.getPort();
    

    As Cookie said, from java.net.URI (docs).

    0 讨论(0)
  • 2021-01-04 22:50

    I think java.net.URI does what you want.

    0 讨论(0)
  • 2021-01-04 22:57

    try this:

    URL serverURL = new URL(request.getScheme(),      // http
                            request.getServerName(),  // host
                            request.getServerPort(),  // port
                            "");                      // file
    

    EDIT

    hiding default port on http and https:

    int port = request.getServerPort();
    
    if (request.getScheme().equals("http") && port == 80) {
        port = -1;
    } else if (request.getScheme().equals("https") && port == 443) {
        port = -1;
    }
    
    URL serverURL = new URL(request.getScheme(), request.getServerName(), port, "");
    
    0 讨论(0)
  • 2021-01-04 23:06
    public String getServer(HttpServletRequest request) {
      int port = request.getServerPort();
      StringBuilder result = new StringBuilder();
      result.append(request.getScheme())
            .append("://")
            .append(request.getServerName());
    
      if (port != 80) {
        result.append(':')
              .append(port);
      }
    
      return result;
    }
    
    0 讨论(0)
  • 2021-01-04 23:09

    If you want to preserve the URL as it appeared in the request (e.g. leaving off the port if it wasn't explicitly given), you can use something like this. The regex matches HTTP and HTTPS URLs. Capture group 1 contains the server root from the scheme to the optional port. (That's the one you want.) Group 2 contains the host name only.

    String regex = "(^http[s]?://([\\w\\-_]+(?:\\.[\\w\\-_]+)*)(?:\\:[\\d]+)?).*$";
    Matcher urlMatcher = Pattern.compile(regex).matcher(request.getRequestURL());
    String serverRoot = urlMatcher.group(1);
    
    0 讨论(0)
提交回复
热议问题