java.net.URL Документ поможет вам понять, как "Извлечь базовый URL из полного URL"
Предварительное примечание:
Следует обратить внимание на это важное примечание со страницы javadoc URL :
"Примечание. Класс URI в некоторых случаях выполняет экранирование полей своего компонента. Рекомендуемый способ управления кодированием и декодированием URL-адресов заключается в использовании URI и преобразовании между этими двумя классами с использованием toURI () и URI.toURL () . "
Объяснительные юнит-тесты:
Вот два простых модульных теста, иллюстрирующих концепцию «базового URL»
package com.elementique.web;
import org.junit.Test;
import java.net.URI;
import java.net.URL;
import static org.junit.Assert.assertEquals;
public class UrlTest {
@Test
public void baseUrlAuthority() throws Exception {
URL url = URI.create("http://username:password@host1:8080/directory/file?query#ref").toURL();
assertEquals("http", url.getProtocol()); // protocol is also known as 'scheme'
assertEquals("username:password@host1:8080", url.getAuthority());
String baseUrlAuthority= url.getProtocol() + "://" + url.getAuthority();
assert (url.toString().startsWith(baseUrlAuthority));
}
@Test
public void baseUrlHostAndDefaultPort() throws Exception {
URL url = URI.create("http://host2/a/b/c").toURL();
assertEquals(-1, url.getPort()); // -1 as port is not defined in this case
String baseUrlHostAndDefaultPort= url.getProtocol() + "://" + url.getHost();
assert (url.toString().startsWith(baseUrlHostAndDefaultPort));
}
}
Извлечение базового URL:
Итак, «извлечение базового URL из полного URL» можно сделать так:
return url.getProtocol()+"://"+url.getAuthority()+"/"
Или это, если вы НЕ хотите, чтобы часть имени пользователя / пароля
if(url.getPort() == -1){ // port is not
return url.getProtocol()+"://"+url.getHost()+"/";
} else {
return url.getProtocol()+"://"+url.getHost()+":"+url.getPort()"/";
}
Реализация:
Вот реализация, которая делает это (на основе getAuthority ()):
public static String getBaseUrl(String urlString)
{
if(urlString == null)
{
return null;
}
try
{
URL url = URI.create(urlString).toURL();
return url.getProtocol() + "://" + url.getAuthority() + "/";
}
catch (Exception e)
{
return null;
}
}
Примечание:Удалите завершающий символ "/", если он вам не нужен