Wpis z mikrobloga

#java #programowanie #ciekawostkigrizwolda

Nigdy nie wrzucajcie obiektów klasy

java.net.URL
do kolekcji! Zamiast tego użyjcie

java.net.URI
.

Implementacja metody

equals
i

hashCode
w klasie

java.net.URL
łączy się z serwerem za podanym URL w celu weryfikacji adresu IP i numeru portu, przez co te metody są blokujące! Co ważniejsze - nie zawsze podają poprawny wynik, który jest zależny od konfiguracji serwera DNS, load balancera i wszystkiego co stoi między tobą, a serwerem docelowym.
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Grizwold: a skąd te informacje o load balancerach, DNSach itp? Najważniejszy błąd jaki tam popełniono, z tego co pamiętam, to, że nikt nie przewidział, że dojdzie do takiej sytuacji, że np. będzie kilka stron na jednym serwerze WWW. Dlatego np.:

URL url1 = new URL("http://wykop.pl");

URL url2
  • Odpowiedz
@Eoghan: Skąd info o DNS? Jest w DNSach coś takiego jak CNAME record, który do wielu adresów URL przypisuje jeden adres IP.

Skąd info o load balancerach? Jedne LB pośredniczą miedzy użytkownikiem a siecią serwerów podając swój adres IP w odpowiedzi inne tylko przekierowują na odpowiedni serwer. Dużo jest algorytmów
  • Odpowiedz
@Grizwold: CNAME przypisuje jeden adres IP dla wielu domen? Oj chyba nawet moja nikła wiedza o sieciach mówi mi, że raczej nie.

Przy load balancerze sam słusznie zauważasz, że podaje on swój adres IP, dlatego pytam jaki on ma związek z metodą equals(), bo jak dla mnie, to czy load balancer jest, czy go nie ma, czy korzysta z algorytmu rr, lc, czy jakiegokolwiek innego kompletnie nic tutaj nie zmienia.
  • Odpowiedz
@Eoghan: Ok, przyznaje. Kompletnie nie znam się na sieciach a CNAME w ogole zle zrozumialem. Ale sens posta (hashCode, equals w URL) zachowany i to jest najwazniejsze.
  • Odpowiedz