2012-03-21 2 views
5

Lần đầu tiên tôi muốn biết liệu có một cách tích hợp để nhận tên miền phụ từ url bằng các servlet thuần túy không?Làm cách nào tôi có thể truy xuất miền phụ trong một servlet? Spring có bất kỳ người trợ giúp nào không

Và sau đó nếu mùa xuân có bất kỳ người trợ giúp nào?

Vì vậy, các url của tôi sẽ như thế nào:

jonskeet.stackoverflow.com 

đâu JonSkeet là tên miền phụ.

Tôi sẽ tạo bộ lọc sẽ tải đối tượng dựa trên giá trị tên miền phụ.

BTW, khi tạo bộ lọc, có cách nào để đặt hàng bộ lọc để đảm bảo tất cả các bộ lọc đó theo đúng thứ tự cụ thể không?

+0

Tên chính tả của Jon Skeet có bạn thân, tisk tisk! – Kiril

+0

+1 nếu bạn tự hỏi nếu SO đã thực sự tạo ra một tên miền phụ Jon Skeet và cố gắng truy cập http://jonskeet.stackoverflow.com – Kiril

+0

Không, tôi không nghĩ rằng bạn có thể đi xa hơn là lấy URL và sau đó tách Tự xâu chuỗi. BTW, bạn không nên đặt nhiều câu hỏi, đặc biệt khi câu hỏi của bạn về bộ lọc có thể được trả lời nhanh chóng với tìm kiếm của Google. – madth3

Trả lời

7

Tôi nghi ngờ có API đặc biệt cho việc này. Nhưng bạn có thể lấy nó từ HttpRequest sử dụng request.getServerName().split("\\.")[0]. Dường như nó đủ dễ dàng.

Giới hạn là bạn không thể hỗ trợ "tên miền phụ" chứa ký tự dấu chấm, ví dụ: jon.skeet.stackoverflow.com.

+0

Ah, các tên miền phụ không thể ** thực sự ** chứa các dấu chấm, xem để biết thêm chi tiết: http://stackoverflow.com/questions/7111881/what-are-the-allowed-characters-in-a-sub-domain – Kiril

+0

Nói cách khác: dấu chấm không phải là một phần của miền phụ, đó là dấu tách cho các phần văn bản của tên miền. – Kiril

+1

getServerName() cũng trả về www, vì vậy nó sẽ thất bại, sớm hay muộn –

1

Sử dụng ổi.

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; 
} 

Vì vậy, "jon.skeet.stackoverflow.com" sẽ trở lại "jon.skeet".