# Java Web Start

In informatica, Java Web Start (noto anche come JavaWS, javaws o JAWS) è stato un framework sviluppato da Sun Microsystems (ora Oracle), che permetteva agli utenti di scaricare ed avviare applicazioni software per Java Platform direttamente da Internet utilizzando un browser web.
Il software Java Web Start:
* Permetteva una facile attivazione delle applicazioni mediante un clic
* Garantiva che venisse sempre eseguita l'ultima versione dell'applicazione
* Eliminava le complicate procedure d'installazione e di aggiornamento
Java Web Start è considerato deprecato a partire da Marzo 2018 e non più incluso nelle nuove JRE/JDK a partire dalla versione 11, e i suoi utilizzatori sono incoraggiati a passare ad altre alternative di distribuzione.
Una implementazione libera è ancora manutenuta dal progetto IcedTea, ma non è considerato parte della distribuzione Java ufficiale.

## Funzionalità

A differenza delle Java applets, le applicazioni Web Start non vengono eseguite all'interno del browser, e la sandbox nella quale vengono eseguiti non ha bisogno di molte limitazioni, sebbene questo può essere configurato. Web Start ha un vantaggio rispetto alle applets, nel senso che supera molti problemi di compatibilità tra i Java browser e le varie versioni di macchine virtuali Java (JVM). D'altro canto, i programmi Web Start non possono comunicare facilmente con il browser come invece avviene con le applets. Per facilitare la migrazione, gli utenti possono anche invocare una Applet Java come applicazione Java Web Start.

## Implementazione

Java Web Start forniva una serie di classi nel package javax.jnlp, le quali fornivano una serie di servizi per l'applicazione. Sun progettò molti di questi servizi al fine di consentire l'accesso accuratamente controllato alle risorse (come files e gli appunti di sistema), mentre limitava l'applicazione nelle operazioni di autorizzazione.
Sun introdusse la versione 1.0 di Web Start nel marzo 2001. Con il J2SE 1.4 Web Start si presentava come una parte di default di Java Runtime Environment (JRE) chiamato javaws, e per gli amministratori di computer non era più necessario installarlo separatamente.
JavaWS è stato in seguito deprecato e rimosso dalla JRE 11 in poi.

## Java Network Launching Protocol (JNLP)

Spesso i programmatori, nel gergo informatico, tendono ad intercambiare il termine Java Network Launching Protocol (JNLP) con il termine "Web Start". In realtà JNLP è un protocollo, definito da uno schema XML, e specifica la modalità con cui lanciare le applicazioni Java Web Start. JNLP è costituito da un insieme di regole che definiscono esattamente come implementare il meccanismo di lancio. File JNLP includono informazioni come la posizione del file del pacchetto jar e il nome della classe principale per l'applicazione, oltre ad altri parametri per il programma.
Un browser configurato correttamente passa i file JNLP a un Java Runtime Environment (JRE), il quale a sua volta scarica l'applicazione sulla macchina dell'utente e lo manda in esecuzione. Lo sviluppo di JNLP si è svolto nell'ambito della Java Community Process di JSR 56. Essa include l'originale versione 1.0, la successiva release 1.5 di manutenzione, e, dal 2006 [update], l'attesa versione 6.0 di manutenzione.
JNLP è gratuito; gli sviluppatori non devono pagare un canone per poterlo utilizzare nei programmi.
Importanti caratteristiche di Web Start includono la possibilità di scaricare e installare automaticamente un JRE nel caso in cui l'utente non abbia ancora installato Java, e per i programmatori di specificare quali versione di JRE un dato programma abbia bisogno per essere eseguito. L'utente non deve necessariamente rimanere collegato a Internet per eseguire i programmi scaricati, perché l'esecuzione viene garantita da una cache locally-maintained. Aggiornamenti del download del software dal Web diventano disponibili quando l'utente dispone di una connessione per Internet, facilitando così l'onere della distribuzione.
Ogni utente del computer può utilizzare JNLP, semplicemente installando un client JNLP (molto comunemente Java Web Start). L'installazione può avvenire automaticamente in modo tale che l'utente finale, al momento della prima esecuzione dell'applicazione Java, vede solo l'avvio del client scaricato e installato.
JNLP funziona in modo simile a come lavora HTTP / HTML per il web. Per il rendering di una pagina web HTML, dopo che l'utente fa clic su un link, il browser invia una URL a un webserver, il quale restituisce un file HTML. Il browser quindi richiede le risorse riferite a questo file (immagini, css), ed esegue il rendering definitivo della pagina una volta che ha ricevuto sufficienti informazioni. Il rendering della pagina di solito inizia prima che tutte le risorse siano state scaricate; alcune risorse non fondamentali per il layout della pagina (ad esempio immagini), possono essere caricate in seguito - o su richiesta, se non è impostata la "Load Images Automatically" del browser.
Il JNLP rispecchia questo processo; nella stessa maniera in cui un browser Web esegue il rendering di una pagina web, così un client JNLP "esegue il rendering" una applicazione Java. Dopo che l'utente fa clic su un link il browser invia una URL di un webserver, il quale restituisce un file JNLP (invece di un file HTML) per l'applicazione. Il client JNLP analizza il file, visite le risorse specificate (file jar), attende il recupero di tutte le risorse necessarie, e lancia poi l'applicazione. Il file JNLP può segnare alcune risorse come "lazy", esso informa il client JNLP che l'applicazione per iniziare non ha bisogno di quelle risorse, bensì che sono da recuperare in seguito, quando e/o se l'applicazione richiederà loro.

## Compressione Pack200 (Pack200 compression)

Per ridurre le dimensioni di una applicazione Java Web Start di Sun Microsystems ha introdotto un sistema di compressione chiamato Pack200 a Java 1.5.0. Essa riduce il numero di byte in modo così efficiente che può comprimere un file grande jar per un nono delle sue dimensioni originali, se contiene solo classi Java. Java Web Start ha supportato Pack200 dalla sua prima comparsa, ma inizialmente questa caratteristica richiedeva collaborazione sul lato server e una certa dose di esperienza per le impostazioni. Quando Sun introdusse Java SE 6u10, il supporto Pack200 è diventato disponibile senza la necessità di un sostegno speciale server. I progettisti di applicazioni possono attivare / disattivare questa funzionalità all'interno dei file JNLP. Su connessioni lente Pack200 fornisce un incremento delle prestazioni nel tempo di avvio della applicazione e nel tempo di download.

## Signed Web Start applications

Nelle impostazione predefinita, le applicazioni vengono eseguite in modalità "ristretta", ciò significa che essi non hanno accesso per alcune risorse di sistema come file locali. Ma i publisher possono rimuovere queste restrizioni, firmando le proprie applicazioni Web Start con lo strumento jarsigner che viene fornito con il JDK.