Creazione e configurazione di Jetty 9 Server in Java

1. Panoramica

In questo articolo parleremo della creazione e configurazione di un'istanza Jetty a livello di codice.

Jetty è un server HTTP e un contenitore servlet progettato per essere leggero e facilmente integrabile. Daremo uno sguardo a come impostare e configurare una o più istanze del server.

2. Dipendenze di Maven

Per iniziare, vogliamo aggiungere Jetty 9 con le seguenti dipendenze Maven nel nostro pom.xml :

 org.eclipse.jetty jetty-server 9.4.8.v20171121   org.eclipse.jetty jetty-webapp 9.4.8.v20171121 

3. Creazione di un server di base

Avviare un server embedded con Jetty è facile come scrivere:

Server server = new Server(); server.start();

Lo spegnimento è altrettanto semplice:

server.stop();

4. Gestori

Ora che il nostro server è attivo e funzionante, dobbiamo istruirlo su cosa fare con le richieste in arrivo. Questa operazione può essere eseguita utilizzando l' interfaccia Handler .

Potremmo crearne uno noi stessi, ma Jetty fornisce già una serie di implementazioni per i casi d'uso più comuni. Diamo un'occhiata a due di loro.

4.1. WebAppContext

La classe WebAppContext consente di delegare la gestione delle richieste a un'applicazione Web esistente. L'applicazione può essere fornita come percorso del file WAR o come percorso della cartella dell'applicazione web.

Se vogliamo esporre un'applicazione nel contesto "miaApp", scriveremmo:

Handler webAppHandler = new WebAppContext(webAppPath, "/myApp"); server.setHandler(webAppHandler);

4.2. HandlerCollection

Per applicazioni complesse, possiamo anche specificare più di un gestore utilizzando la classe HandlerCollection .

Supponiamo di aver implementato due gestori personalizzati. Il primo esegue solo operazioni di registrazione mentre il secondo crea e invia una risposta effettiva all'utente. Vogliamo elaborare ogni richiesta in arrivo con entrambi in questo ordine.

Ecco come farlo:

Handler handlers = new HandlerCollection(); handlers.addHandler(loggingRequestHandler); handlers.addHandler(customRequestHandler); server.setHandler(handlers);

5. Connettori

La prossima cosa che vogliamo fare è configurare su quali indirizzi e porte il server ascolterà e aggiungere un timeout di inattività.

La classe Server dichiara due costruttori di convenienza che possono essere utilizzati per collegarsi a una porta o un indirizzo specifico.

Anche se questo può essere ok quando si tratta di piccole applicazioni, non sarà sufficiente se vogliamo aprire più connessioni su socket diversi.

In questa situazione, Jetty fornisce l' interfaccia Connector e più specificamente la classe ServerConnector che consente di definire vari parametri di configurazione della connessione:

ServerConnector connector = new ServerConnector(server); connector.setPort(80); connector.setHost("169.20.45.12"); connector.setIdleTimeout(30000); server.addConnector(connector);

Con questa configurazione, il server sarà in ascolto su 169.20.45.12:80. Ogni connessione stabilita su questo indirizzo avrà un timeout di 30 secondi.

Se dobbiamo configurare altri socket possiamo aggiungere altri connettori.

6. Conclusione

In questo breve tutorial, ci siamo concentrati su come configurare un server incorporato con Jetty. Abbiamo anche visto come eseguire ulteriori configurazioni utilizzando gestori e connettori .

Come sempre, tutto il codice utilizzato qui può essere trovato su GitHub.