2009-12-03 12 views
6

Desidero eseguire il server di una pagina JSP archiviata in un database come un BLOB. Quindi se arriva una richiesta all'URL http://mydomain.com/app/list.jsp so di andare al DB per recuperare la lista delle risorse.jsp.Servire JSP memorizzato nel DB

Sto usando la molla e le tessere, quindi ho impostato il servlet di adispatcher e i controller in modo tradizionale. Sarebbe simile in linea di principio al servlet di risorse che il Web di primavera deve servire file javascript e messaggi all'interno di jar?

Si noti che le JSP non dovrebbero essere solo HTML statico, avrò i bean (attributi del modello) associati alla pagina, quindi continuerò a voler usare EL per interrogare il bean.

Acclamazioni

+0

JSP avrebbero probabilmente bisogno di essere estratto dal DB al file locale per cui hanno bisogno per avere compilato per servlet regolari. Non sono abbastanza sicuro di come questo progetto si esibirebbe ... Quindi non vedo l'ora di risposte appassionate :) – Romain

+2

Le persone lo farebbero perché un JSP memorizzato in un DB è diverso da un JSP memorizzato su un disco. Con un DB ci sono molte funzionalità che i dischi non hanno, come le transazioni, la possibilità di memorizzare metadati, permessi, ecc. Abituali. Se si memorizzano tutte queste cose nel DB ma si memorizza il JSP sul disco si aumenta complessità della parte CMS. Se si memorizza JSP nel DB, si aumenta la complessità del caricatore JSP. Per quanto riguarda le prestazioni, il caricamento iniziale e la compilazione del JSP sarebbero più lenti ma una volta compilato, le prestazioni dovrebbero essere le stesse. –

risposta

3

JSP caricamento e compilazione è implementato nel contenitore servlet. Esistono due approcci che è possibile utilizzare per rendere possibile questa funzione:

  1. Modificare il servlet JSP del contenitore servlet. Se stai usando, diciamo, Jetty o Tomcat che sono open-source, puoi facilmente consultare il loro servlet JSP e modificarlo in modo che legga i JSP dal DB. Potrebbe essere possibile adattare uno di questi per l'utilizzo in un contenitore proprietario. Questo è il modo più diretto per risolvere il problema, ma stai entrando in un campo minato di potenziali bug.
  2. Costruire il CMS nel database come pianificato, ma copiare i JSP sul filesystem dell'applicazione in esecuzione mentre l'applicazione è in esecuzione. Consenti al normale rilevamento delle modifiche JSP del server delle applicazioni di notare che si stanno verificando le modifiche. È possibile racchiudere tutte le richieste con un filtro che controlla il DB per JSP aggiornati, copiare i JSP al momento della modifica o utilizzare un lavoro pianificato per copiarli a determinati intervalli.

In entrambi gli scenari è necessario preoccuparsi delle perdite di memoria per le classi scaricate, in particolare se uno qualsiasi dei codici utilizza ThreadLocals o altre variabili statiche. I normali caricatori JSP presentano già problemi se si scaricano WAR o si ricompilano JSP in fase di runtime. Ciò è dovuto alle limitazioni in Java e non è facilmente risolvibile (a seconda di quale JDK è utilizzato). Non consiglio mai, o molto raramente, di modificare i JSP senza riavviare il server a meno che non sia possibile evitarlo.

Problemi correlati