Kurs Java Podstawy - rozszerzony

Spark Framework

Spark to bardzo lekki, według autorów prawdopodobnie najlżejszy framework javowy pozwalający stworzyć prostą aplikację webową. Jego najpopularniejsze zastosowanie to tworzenie prostych usług REST wszędzie tam, gdzie nie są wymagane technologie takie jak np. JEE. Jest to również dobra alternatywa dla JAX-RS API, gdzie do konfiguracji wykorzystywanych jest wiele adnotacji, za którymi nie każdy musi przepadać.

Spark framework posiada pełne wsparcie dla Javy 8 i czuć, że jest to silny kierunek rozwoju. W większości tutoriali i przykładów spotkamy się z notacją wykorzystującą importy statyczne oraz wyrażenia lambda, czy referencje do metod.

Hello World

Napisanie aplikacji typu hello world z wykorzystaniem Sparka jest niemal tak samo proste jak stworzenie podstawowego hello world w samej Javie. W celu zaimportowania biblioteki najwygodniej będzie stworzyć projekt Mavenowy i dodać odpowiednią zależność:

com.sparkjavaspark-core2.2

To co ważne, to fakt, że od wersji Spark 2.0 wsparcie dla Javy starszej niż 8 zostało usunięte, więc jeśli z jakiegoś powodu musimy korzystać z Javy 7, czy 6, należy skorzystać ze starzej wersji projektu.

import static spark.Spark.*;

public class HelloSpark {
	public static void main(String[] args) {
		port(8080);
		get("/", (request, response) -> "Hello Spark!");
	}
}

Powyższy kod przedstawia kompletny kod aplikacji. Tak jak wspomnieliśmy wcześniej w Sparku panuje podejście minimalistyczne do tworzenia kodu. Większość metod w klasach jest statycznych, więc poprzez importy statyczne pozbywamy się zbędnych odwołań poprzez nazwy klas. Domyślnie Spark uruchamia serwer na porcie 4567, ale jak widać w powyższym przykładzie bardzo prosto można go ustawić na popularny port 8080 wywołując metodę port(8080).

Do obsługi różnego rodzaju żądań mamy do dyspozycji metody takie jak get(), czy post() w kilku przeciążonych wersjach. W podstawowej wersji metody te przyjmują ścieżkę żądania oraz obiekt implementujący interfejs Route. Ponieważ ten z kolei jest interfejsem funkcyjnym posiadającym tylko jedną metodę handle(), to w jego miejsce możemy przekazać wyrażenie lambda lub referencję do metody o odpowiedniej sygnaturze. Metoda handle() przyjmuje parametry Request i Response, więc osoby zaznajomione z JEE na pewno skojarzą to z metodami serwletów takimi jak doGet(), czy doPost().

W naszym przypadku obsługujemy proste żądanie typu GET wysłane do głównej ścieżki naszej aplikacji. W odpowiedzi wysyłamy tekst "Hello Spark".

Po uruchomieniu aplikacji możemy przejść w przeglądarce do adresu localhost:8080/ i przekonać się, że aplikacja działa poprawnie

hello-spark

Na uwagę zasługuje fakt, że uruchomienie wbudowanego serwera(jetty) zajmuje w okolicach jednej sekundy, a aplikacja potrzebuje minimalnej ilości zasobów do działania. Rozwiązanie takie sprawdzi się więc świetnie np. w przypadku budowy domowego centrum rozrywki z centralnym panelem sterującym, gdzie w oparciu o Sparka możemy postawić np. prosty serwis REST na urządzeniu pokroju Raspberry PI.

Komentarze