Przejdź do głównej treści

Wieloaplikacyjna usługa webowa

W tym samouczku utworzymy wieloaplikacyjną usługę webową dla Netuno. Oznacza to, że utworzymy usługę webową w Javie, która będzie znajdować się w katalogu głównym Netuno i będzie mogła być używana przez dowolną aplikację w folderze apps.

Przykładem, który utworzymy, zgodnie z poprzednimi samouczkami, jest usługa kalkulator, czyli przykładowa usługa wykonująca proste operacje arytmetyczne.

Aby rozpocząć, najpierw należy utworzyć strukturę folderów projektu. W tym przykładzie zakładamy, że projekt zostanie utworzony w folderze o nazwie Kalkulator. Należy więc utworzyć strukturę folderów odzwierciedlającą nazwę pakietu (w naszym przykładzie org.netuno.addon.kalkulator). Nasza struktura folderów będzie zatem następująca:

  • Kalkulator/src/main/java/org/netuno/addon/kalkulator/web/

W tej strukturze utworzymy klasę Java o nazwie KalkulatorWeb, która zdefiniuje naszą niestandardową usługę webową:

  • Kalkulator/src/main/java/org/netuno/addon/kalkulator/web/KalkulatorWeb.java

Zatem pakiet zdefiniowany w klasie będzie następujący:

package org.netuno.addon.kalkulator.web;

Aby klasa definiowała niestandardową wieloaplikacyjną usługę webową, musi rozszerzać klasę org.netuno.tritao.Web:

package org.netuno.addon.kalkulator.web;

import org.netuno.tritao.Web;

public class KalkulatorWeb extends Web {
// ...
}

Aby zdefiniować adres URL usługi, należy zrobić tak:

package org.netuno.addon.kalkulator.web;

import org.netuno.proteu.Path;
import org.netuno.tritao.Web;

@Path("/addon/kalkulator/Kalkulator")
public class KalkulatorWeb extends Web {
// ...
}

Metodą, którą należy przesłonić, aby usługa działała, jest metoda run:

package org.netuno.addon.kalkulator.web;

import org.netuno.proteu.Path;
import org.netuno.proteu.ProteuException;
import org.netuno.tritao.Web;

import java.io.IOException;

@Path("/addon/kalkulator/Kalkulator")
public class KalkulatorWeb extends Web {
@Override
public void run() throws IOException, ProteuException {
// ...
}
}

Następnie, korzystając z niektórych zasobów Netuno, zdefiniujmy metodę run tak, aby otrzymywała parametr operacja, który określi, której operacji użyć spośród plus (dodawanie) i minus (odejmowanie), oraz parametry liczba1 i liczba2, które będą operandami (składnikami w przypadku dodawania, odjemną i odjemnikiem w przypadku odejmowania).

Następnie, na podstawie wybranej operacji, nasza usługa obliczy wynik i zwróci go użytkownikowi w formacie JSON:

package org.netuno.addon.kalkulator.web;

import org.netuno.proteu.Path;
import org.netuno.proteu.ProteuException;
import org.netuno.tritao.Web;
import org.netuno.tritao.resource.Out;
import org.netuno.tritao.resource.Req;
import org.netuno.tritao.resource.Val;

import java.io.IOException;

@Path("/addon/kalkulator/Kalkulator")
public class KalkulatorWeb extends Web {
@Override
public void run() throws IOException, ProteuException {
Req req = resource(Req.class);
Out out = resource(Out.class);
Val val = resource(Val.class);

String operacja = req.getString("operacja", "plus");
double liczba1 = req.getDouble("liczba1", 0);
double liczba2 = req.getDouble("liczba2", 0);

double wynik = 0;

if (operacja.equalsIgnoreCase("minus")) {
wynik = liczba1 - liczba2;
} else {
wynik = liczba1 + liczba2;
}

out.json(val.map().set("wynik", wynik));
}
}

Teraz wystarczy skompilować klasę, upewniając się, że plik KalkulatorWeb.class znajduje się w folderze:

  • netuno/core/web/WEB-INF/classes/org/netuno/addon/kalkulator/web/

Lub utworzyć plik JAR, upewniając się, że znajduje się w folderze:

  • netuno/lib/

Uruchom serwer Netuno z dowolną aplikacją:

./netuno server app=demo

Aby wywołać tę usługę, należy dodać .netuno na końcu adresu URL:

  • http://localhost:9000/addon/kalkulator/Kalkulator.netuno

Na przykład, jeśli wywołasz:

  • http://localhost:9000/addon/kalkulator/Kalkulator.netuno?operacja=minus&liczba1=5&liczba2=2

Otrzymasz w odpowiedzi:

{"wynik":3}

Pełne pliki projektu możesz zobaczyć pod tym linkiem.

W następnym samouczku dowiemy się, jak utworzyć zasób Netuno przy użyciu Javy.