Qual è l’utilità dell’apolidia in JSF?

Secondo questo blog JSF sta diventando apolidi. L’intero punto di utilizzo di JSF è che rende il salvataggio e il ripristino dello stato un lavoro ingrato. Qual è il punto di JSF diventando apolidi? Potete per favore fornire un esempio in cui ciò può essere utile.

Prima di tutto, vorrei chiarire che la JSF non sta “andando apolidi” esattamente nella sua interezza. JSF aggiunge solo una nuova funzionalità che consente agli sviluppatori di creare viste / moduli senza stato su richiesta.

Il risparmio di stato è particolarmente utile nelle forms manipolate dynamicmente, ad esempio con parti condizionate ajax condizionate. Memorizza lo stato del modulo attraverso i postback basati su Ajax. In altre parole, sono quelle forms in cui è assolutamente necessario un bean gestito con scope view invece di un bean gestito con scope richiesta. In caso di moduli statici legati a un bean con ambito richiesta, lo stato potrebbe facilmente essere ricreato in base alle richieste in base al file di visualizzazione e, quindi, non deve necessariamente essere salvato.

Il risparmio di stato ha in caso di gestione del risparmio di stato lato server, ma un costo in termini di memoria del server e creazione di sessioni. Inoltre, ha lo svantaggio aggiuntivo che una ViewExpiredException sarebbe verificata durante un postback mentre la sessione è scaduta. Tutto ciò può essere risolto impostando la gestione di salvataggio dello stato sul lato client. Ma questo ha a sua volta un costo in termini di larghezza di banda della rete e prestazioni inferiori a causa della serializzazione.

Ad esempio, nel caso di siti Web di grandi dimensioni che coprono una sezione “pubblica” e “riservata”, si desidera posticipare la creazione della sessione finché l’utente non ha effettivamente effettuato l’accesso. Tuttavia, se si dispone di un modulo di accesso JSF sulla parte pubblica, la sessione sarebbe comunque stata creata semplicemente accedendo a quella pagina. Questo è un costo non necessario se il modulo non ha praticamente nessuno stato dinamico ed è legato a un bean con scope richiesta.

È vero, questo costo è trascurabile se si dispone di hardware all’avanguardia, ma non è trascurabile se si dispone di un numero relativamente elevato di visitatori e / o di hardware relativamente scarso. In tal caso, misurare è sapere. Inoltre, non è sempre ansible andare completamente apolidi, si perderebbe il vantaggio e l’esperienza di avere dynamicmente manipolato viste / forms. Tuttavia, si potrebbe teoricamente mantenere lo stato su una base di richiesta, facendo dei giochini con campi di input nascosti e / o parametri di richiesta personalizzati.

Si noti che l’apolidia ha uno svantaggio in più che è teoricamente più facile eseguire un attacco CSRF se c’è un buco XSS aperto. Fortunatamente, con JSF2 / Facelets è già molto difficile avere un buco XSS. L’unico modo per ottenerlo è utilizzare per visualizzare nuovamente i dati controllati dall’utente.

Guarda anche:

  • Perché JSF salva lo stato dei componenti dell’interfaccia utente sul server?
  • Sono a rischio di attacchi CSRF in una forma POST che non richiede l’accesso dell’utente?
  • CSRF, XSS e SQL Injection attack prevention in JSF
  • Come si comportano le diverse fasi del ciclo di vita JSF in una vista senza stato contenente un modulo

Il punto è solo mantenere lo stato quando c’è uno stato reale da mantenere.

Uno dei grandi problemi con JSF è stato ridimensionato.

Fondamentalmente hai avuto due scelte con JSF:

  • store state on server – pros: tempo di risposta più rapido; svantaggi: hai bisogno di un sacco di memoria di avvio per gestire più di 2-300 utenti che “navigano” ad esempio prima di accedere o aggiungere qualcosa al carrello

  • store state su client – pros: rimuove il limite di memoria; svantaggi: aumenta la larghezza di banda del server poiché l’albero dei componenti deve essere inviato ogni volta al client

Stateless dovrebbe garantire che JSF possa essere utilizzato per offrire contenuti in modo efficiente mentre l’utente non ha bisogno di essere mantenuto.

Ci sono ulteriori perfezionamenti, come la possibilità di riutilizzare l’albero dei componenti dove ha senso, ma l’idea è di far scalare meglio l’app.