Domanda

Sono un grande fan di mantenere la logica dell'applicazione nel servlet e mantenere JSP il più semplice possibile. Uno dei motivi è che qualsiasi buon web designer dovrebbe essere in grado di espandere le proprie conoscenze HTML per creare alcuni tag JSTL per eseguire iterazioni semplici, bean di accesso, ecc. Manteniamo anche i componenti più complessi / ajax / js una libreria di tag (simile a displayTag ma per i nostri componenti).

Il più delle volte tutto funziona bene - Il servlet esegue qualsiasi SQL necessario e memorizza i risultati in bean per l'accesso al JSP. Dove abbiamo un problema è quando i record a cui desideriamo accedere sono specificati dal progetto.

L'esempio più chiaro sarebbe la home page - deve essere accattivante ed efficace. Non deve essere uniforme come il resto del sito. Esistono molti casi unici o "casi speciali" qui, dove desideriamo eseguire una query su un particolare record di prodotto o altro.

Ciò che il designer desidera davvero è un modo per ottenere un bean di prodotto dall'ID prodotto in modo che possa accedere alle proprietà normalmente. Ovviamente non vogliamo eseguire query per tutti i prodotti e non voglio eseguire query nella presentazione.

Sono abbastanza sicuro che sto chiedendo l'impossibile qui e che devo rinunciare a qualcosa. La mia domanda è cosa?

Modifica

Sbaglio nel pensare che tutta la logica dell'applicazione dovrebbe essere completa prima di chiamare il JSP? Avevo l'impressione che fosse considerata la migliore pratica eseguire tutte le query / i calcoli / le elaborazioni nel servlet, quindi passare i bean (abbastanza) stupidi a un JSP (molto) stupido.

Esistono un paio di metodi per cui la complessità effettiva della query può essere incapsulata in un'altra classe (tag o bean personalizzati) e JSP può chiamarla. Questo mantiene semplice il JSP (obiettivo 1) ma il JSP sta ancora "attivando" la domanda - abbastanza in ritardo nel processo.

  • Ho sbagliato totalmente e va bene farlo.
  • È una regola generale, ma perfettamente ok farlo in questo caso.
  • Potrei incorrere in problemi?

MODIFICA - Esempio

Spero che questo esempio possa aiutare:

La home page non è un " modello " come la categoria / pagine di ricerca - è progettato su misura per funzionare molto bene con un'immagine di marketing e un paio di immagini di prodotti specifici. Tuttavia, contiene informazioni su quei due prodotti che dovrebbero essere ottenuti in modo dinamico (quindi il nome e, soprattutto, il prezzo) rimangono sincronizzati con il db.

Il servlet non può sapere quali saranno questi prodotti, perché se il progettista vuole modificarli / rimuoverli / aggiungerne altri, dovrebbe solo modificare il JSP (e possibilmente l'XML come suggerito da una risposta).

È stato utile?

Soluzione

Se ho capito bene, hai una logica nel JSP che vuole un prodotto particolare, ma a questo punto non vuoi fare una query dal DB, ed è troppo tardi perché il servlet ne sia consapevole.

(Una nota a margine, mentre rispetto la tua volontà di mantenere la separazione delle preoccupazioni, il fatto che questo sia un problema mostra chiaramente che il tuo framework ha troppa logica nel livello di presentazione ... ma dal momento che probabilmente non possiamo risolvere che ... andare avanti).

La mia raccomandazione è che il vostro progettista crei un file XML di configurazione che contenga tutti i casi speciali di cui ha bisogno per il frontend, e il vostro servlet può leggerlo, quindi restituire i bean stupidi al JSP.

OPPURE ... si suddividono le cose in più richieste utilizzando XMLHTTPRequest e si richiama il servlet per ogni singola query, quindi assemblare la pagina sul client.

Altri suggerimenti

Sembra che tu abbia bisogno di una migliore separazione tra il display e il codice del database. Dovresti avere classi separate che si occupano solo di interagire con il database e non sapere nulla sulla visualizzazione.

Quindi devi solo creare un metodo che cercherà il prodotto per id e restituisca quel bean in modo che il display possa estrarre gli attributi che desidera.

Devi creare un bean personalizzato che eseguirà le tue query per il front-end. In realtà, probabilmente è più simile a qualche bean per ottenere i dati per te, secondo quello che dici qui.

Non c'è alcun problema nel farlo dal punto di vista del design; è solo che il design specifico della home page ha requisiti più eterogenei rispetto al resto del tuo sito. Assicurati che il tuo designer sappia che deve comunicare bene le sue esigenze al team di sviluppo per creare il BO per la tua home page (o qualsiasi altra cosa) e che le cose vadano bene.

Non sbagli nel pensare che tutta la logica dell'applicazione dovrebbe essere completa prima di eseguire il rendering del JSP.

Se è necessario recuperare più elementi da visualizzare nel JSP, si tratterebbe di un'altra richiesta al server e di un altro ciclo di pagine. Se stai cercando un'esperienza di caricamento "interattiva", puoi utilizzare AJAX.

In un ciclo di vita di una singola pagina, trovo difficile capire perché devi invocare le chiamate al database da un JSP. La pagina non è stata precedentemente pubblicata con tutte le variabili di modulo richieste per aiutarti a trovare i dati nelle classi Servlet / Helper?

Se potessi dare un esempio di un caso, sarebbe utile.

[Modifica] Guardando il tuo esempio, sì, il tuo progettista (o l'amministratore del sito) dovrebbe impostare tali informazioni come configurazione, non come parte di JSP. Oppure, potresti avere una piccola pagina app / admin per conservare le informazioni in un database in modo che possano essere modificate in movimento. Quando mostri la tua home page, leggi le configurazioni e carica i dati appropriati.

Non sono sicuro di quale sia la domanda. Se vuoi avere delle istruzioni sql dalle tue pagine jsp, puoi metterle in un file delle proprietà e leggere il file delle proprietà dalla pagina jsp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top