Obsługa połączenia
Po pomyślnym wczytaniu pliku konfiguracyjnego, tworzone jest gniazdo serwera (java.net.ServerSocket). Jako parametr obiekt ten przyjmuje numer portu, na którym ma zostać utworzone (pobierany z pliku konfiguracyjnego). Jeżeli utworzenie gniazda się nie powiedzie (np. wybrany port już jest zajęty), wyrzucany jest wyjątek, który od razu jest przechwycony, i na jego podstawie zwracany jest komunikat o błędzie, oraz następuje zamknięcie aplikacji.
Po utworzeniu na wybranym porcie gniazda serwera, tworzona jest pewna pula wątków do obsługi połączenia z klientem. Liczba wątków, które mają być utworzone pobierana jest z pliku konfiguracyjnego. Jeżeli administrator serwera stwierdzi, że nie chce, aby przy starcie serwera była tworzona taka pula wątków, może ustawić ich ilość w pliku konfiguracyjnym na zero. Wątki są tworzone i uruchamiane, a w ich wnętrzu co 50 milisekund następuje sprawdzenie, czy nie została mu przypisana obsługa połączenia z klientem.
Wątki serwera działają od siebie niezależnie, żaden z nich nie wie o istnieniu pozostałych, nie współdzielą też żadnych informacji. Dzięki temu prawie w ogóle nie wymagają żadnych mechanizmów synchronizacji (np. mutex, semafor). Pula wątków przechowywana jest w formie wektora (java.util.Vector). Kolekcja ta w przeciwieństwie do zwykłej listy (java.util.ArrayList) posiada metody synchronizowane, co ma znaczenie, ponieważ po ukończeniu obsługi połączenia pobrany z puli wątek sam dodaje siebie z powrotem do puli dostępnych wątków i gdyby np. równolegle dwa wątki chciały dodać siebie z powrotem do puli, jeden z nich mógłby zostać zastąpiony tym drugim.
Dalej w aplikacji następuje wejście do nieskończonej pętli, wewnątrz której odbierane są połączenia z klientem (tworzony obiekt java.net.Socket). Po utworzenia połączenia, w pierwszej kolejności sprawdzana jest pula wątków, czy znajdują się w niej wolne wątki do obsługi tego połączenia. Jeżeli tak, następuje zdjęcie wątku z tej puli i przekazanie mu polecenia obsługi połączenia z klientem (wraz z utworzonym obiektem Socket). Jeżeli w puli nie ma wolnego wątku, to następuje jego utworzenie. Po zakończeniu obsługi połączenia przez taki utworzony wątek, nie jest on dodawany do puli dostępnych wątków, lecz usuwany.
Serwer HTTP 