2012-03-21 24 views
5

Najpierw chcę się dowiedzieć, czy istnieje wbudowany sposób uzyskiwania subdomeny z adresu URL przy użyciu czystych serwletów?Jak mogę odzyskać subdomenę w serwlecie? Czy wiosna ma pomocników?

A jeśli wiosna ma pomocników?

Więc moje adresy URL byłoby jak:

jonskeet.stackoverflow.com 

Gdzie JonSkeet jest subdomenę.

Utworzę filtr, który załaduje obiekt na podstawie wartości poddomeny.

BTW, czy podczas tworzenia filtra istnieje sposób na zamówienie filtrów, aby upewnić się, że wszystkie są uruchamiane w określonej kolejności?

+0

Źle napisane imię Jona Skeeta, kolego, tisk tisk! – Kiril

+0

+1, jeśli zastanawiałeś się, czy SO naprawdę utworzył subdomenę Jona Skeeta i próbował odwiedzić http://jonskeet.stackoverflow.com – Kiril

+0

Nie, nie sądzę, że możesz pójść dalej niż uzyskać adres URL, a następnie podzielić Napnij się. Przy okazji nie powinieneś zadawać więcej niż jednego pytania, szczególnie, gdy na pytanie dotyczące filtrów można szybko odpowiedzieć za pomocą wyszukiwarki Google. – madth3

Odpowiedz

7

Wątpię, czy istnieje specjalne API do tego. Ale możesz pobrać go z HttpRequest używając request.getServerName().split("\\.")[0]. Wydaje się, że jest to łatwe.

Ograniczeniem jest brak obsługi "poddomeny" zawierającej znaki kropkowe, np. jon.skeet.stackoverflow.com.

+0

Ah, subdomeny nie mogą ** naprawdę ** zawierać kropek, zobacz więcej szczegółów: http://stackoverflow.com/questions/7111881/what-are-the-allowed-characters-in-a-sub-domain – Kiril

+0

Innymi słowy: kropka nie jest częścią subdomeny, jest separatorem dla tekstowych części nazwy domeny. – Kiril

+1

getServerName() zwraca również www, więc prędzej czy później się nie powiedzie –

1

Użyj Guava.

Gradle:

dependencies { 
compile group: 'com.google.guava', name: 'guava', version: '19.0' 
... 
} 

Java:

private String getSubdomain(HttpServletRequest req) { 

     String site = req.getServerName(); 

     String domain = InternetDomainName.from(site).topPrivateDomain().toString(); 
     String subDomain = site.replaceAll(domain, ""); 
     subDomain = subDomain.substring(0, subDomain.length() - 1); 

     return subDomain; 
} 

Więc "jon.skeet.stackoverflow.com" zwróci "jon.skeet".

Powiązane problemy