Domanda

    

Questa domanda ha già una risposta qui:

         

Ho un'applicazione che invia il cliente a un altro sito per gestire i pagamenti. L'altro sito, al di fuori del cliente, chiama una pagina sul nostro server per farci sapere qual è lo stato del pagamento. La pagina chiamata controlla i parametri forniti dall'applicazione di pagamento e verifica se la transazione ci è nota. Quindi aggiorna il database per riflettere lo stato. Tutto questo senza alcuna interazione con il cliente.

Ho scelto personalmente di implementare questa funzionalità come JSP poiché è più semplice rilasciare un file nel file system piuttosto che compilarlo e comprimerlo e quindi aggiungere una voce in un file di configurazione.

Considerando la funzionalità della pagina, presumo che un servlet sarebbe l'opzione preferita. Le domande sono:   

  • La mia presunzione è corretta?
  •   
  • C'è un vero motivo per usare un servlet su un JSP?
  •   
  • Quali sono questi motivi?
  • È stato utile?

    Soluzione

    Un JSP viene compilato su un servlet la prima volta che viene eseguito. Ciò significa che non esiste una vera differenza di runtime tra di loro.

    Tuttavia, molti hanno una tradizione di usare servlet per controller e JSP per le viste. Poiché i controller sono solo classi Java, è possibile ottenere il supporto completo degli strumenti (completamento del codice, ecc.) Da tutti gli IDE. Ciò garantisce una qualità migliore e tempi di sviluppo più rapidi rispetto ai JSP. Alcuni IDE più avanzati (mi viene in mente IntelliJ IDEA) hanno un ottimo supporto JSP, rendendo obsoleto tale argomento.

    Se stai creando il tuo framework o semplicemente lo fai con semplici JSP, allora dovresti sentirti libero di continuare a usare i JSP. Non ci sono differenze di prestazioni e se ritieni che i JSP siano più facili da scrivere, allora continua.

    Altri suggerimenti

    JSP: per presentare i dati all'utente. Nessuna logica aziendale dovrebbe essere qui, e certamente nessun accesso al database.

    Servlet: per gestire l'input da un modulo o da un URL specifico. Di solito le persone useranno una libreria come Struts / Spring in cima ai Servlet per chiarire la programmazione. Indipendentemente dal fatto che il servlet dovrebbe semplicemente convalidare i dati che sono arrivati ??e quindi passarli a un'implementazione del livello aziendale back-end (su cui è possibile codificare i casi di test). Dovrebbe quindi inserire i valori risultanti nella richiesta o nella sessione e chiamare un JSP per visualizzarli.

    Modello: un modello di dati che contiene i dati strutturati gestiti dal sito Web. Il servlet può prendere gli argomenti, inserirli nel modello e quindi chiamare il livello aziendale. Il modello può quindi interfacciarsi con DAO back-end (o Hibernate) per accedere al database.

    Qualsiasi progetto non banale dovrebbe implementare una struttura MVC. È, ovviamente, eccessivo per funzionalità banale. Nel tuo caso implementerei un servlet che ha chiamato un DAO per aggiornare lo stato, ecc. O qualunque cosa sia richiesta.

    I JSP dovrebbero essere utilizzati nel livello di presentazione, nei servlet per la logica di business e nel codice back-end (di solito a livello di database).

    Non conosco alcun motivo per cui non puoi usare un JSP come descrivi (viene comunque compilato in un servlet dal contenitore), ma hai ragione, il metodo preferito è farlo diventare un servlet in il primo posto.

    I JSP sono una scorciatoia per scrivere un servlet. In realtà sono tradotti in codice java servlet prima della compilazione. (Puoi controllarlo sotto qualche sottodiretto Tomcat che non ricordo il nome).

    Per scegliere tra un servlet un JSP uso una semplice regola: se la pagina contiene più codice html rispetto al codice java, scegli JSP, altrimenti scrivi solo un servlet. In generale ciò si traduce approssimativamente in: utilizzare i JSP per la presentazione dei contenuti e servlet per il controllo, la convalida, ecc.

    Inoltre, è più facile organizzare e strutturare il codice all'interno di un servlet, poiché utilizza la semplice sintassi della classe java. I JSP tendono ad essere più monolitici, sebbene sia possibile creare metodi al loro interno.

    Ci sono 2 regole piuttosto semplici:

    1. Ogni volta che vuoi scrivere codice Java (business logic), fallo in una classe Java (quindi, Servlet).
    2. Ogni volta che vuoi scrivere codice HTML / CSS / JS (vista / logica modello), fallo in un JSP.

    Domanda correlata:

    I JSP sono essenzialmente markup che vengono compilati automaticamente in un servlet dal contenitore del servlet, quindi il passaggio di compilazione avverrà in entrambi i casi. Questo è il motivo per cui un contenitore servlet che supporta JSP deve avere l'intero JDK disponibile invece di aver bisogno solo del JRE.

    Quindi il motivo principale per JSP è ridurre la quantità di codice richiesta per il rendering di una pagina. Se non è necessario eseguire il rendering di una pagina, un servlet è migliore.

    So che questa non è la risposta popolare oggi, ma: quando sto progettando un'app da zero, utilizzo sempre i JSP. Quando la logica non è banale, creo normali classi Java per eseguire il lavoro grugnito che chiamo dal JSP. Non ho mai capito l'argomento secondo cui dovresti usare i servlet perché, come pure classi Java, sono più gestibili. Un JSP può facilmente chiamare una pura classe Java, e ovviamente una normale classe Java è mantenibile come qualsiasi servlet. È più semplice formattare una pagina in un JSP perché puoi mettere tutto il markup in linea invece di dover scrivere un sacco di println. Ma il più grande vantaggio dei JSP è che puoi semplicemente rilasciarli in una directory e sono direttamente accessibili: non devi fare confusione con l'impostazione delle relazioni tra l'URL e il file di classe. La sicurezza viene gestita facilmente facendo iniziare ogni controllo di sicurezza con un controllo di sicurezza, che può essere una singola istruzione di chiamata, quindi non è necessario inserire la sicurezza in un livello di invio.

    L'unica ragione per cui riesco a vedere un servlet è se hai bisogno di un mapping complesso tra gli URL e la classe di esecuzione risultante. Ad esempio, se si desidera esaminare l'URL e quindi chiamare una delle molte classi in base allo stato della sessione o ad alcune di queste. Personalmente non ho mai voluto farlo, e le app che ho visto lo fanno tendono ad essere difficili da mantenere perché prima ancora che tu possa iniziare a fare una modifica devi capire quale codice viene realmente eseguito.

    La maggior parte delle applicazioni Java al giorno d'oggi sono basate sul modello MVC ... Nel lato controller (servlet) si implementa la logica aziendale. Il controller servlet in genere inoltra la richiesta a un jsp che genererà la risposta html effettiva (la vista in MVC). L'obiettivo è quello di separare le preoccupazioni ... Migliaia di libri sono stati scritti sull'argomento.

    In un'architettura MVC, i servlet sono usati come controller e JSP come vista. Ma entrambi sono tecnicamente uguali. JSP verrà tradotto in servlet, sia in fase di compilazione (come in JDeveloper) o quando si accede per la prima volta (come in Tomcat). Quindi la vera differenza sta nella facilità d'uso. Sono abbastanza sicuro che avrai difficoltà a rendere la pagina HTML usando servlet; ma al contrario del buon senso, in realtà troverai abbastanza facile codificare anche una logica abbastanza complessa all'interno di JSP (forse con l'aiuto di una classe di supporto preparata). Ragazzi PHP lo fanno sempre. E così cadono nella trappola della creazione di codici spaghetti. Quindi la mia soluzione al tuo problema: se hai trovato più facile scrivere codice in JSP e non avrebbe coinvolto troppi codici, sentiti libero di scrivere codice in JSP. Altrimenti, usa servlet.

    Sono d'accordo con tutti i punti sopra riportati sulle differenze tra JSP e Servlet, ma qui ci sono un paio di considerazioni aggiuntive. Scrivi:

      

    Ho un'applicazione che invia il file   cliente a un altro sito per gestire il   pagamenti. L'altro sito, al di fuori di   il cliente, chiama una pagina sul nostro   server per farci sapere quale sia lo stato   è del pagamento. La pagina chiamata   controlla i parametri forniti   dall'applicazione di pagamento e dagli assegni   per vedere se la transazione è   noto a noi. Quindi aggiorna il   database per riflettere lo stato. Questo   è tutto fatto senza alcuna interazione   con il cliente.

    La tua applicazione utilizza il servizio di pagamento di un'altra applicazione. La tua soluzione è fragile perché se il servizio di pagamento nell'altra applicazione cambia, la pagina JSP viene interrotta. Oppure, se desideri modificare i criteri di pagamento della tua applicazione, la tua pagina dovrà cambiare. La risposta breve è che l'applicazione dovrebbe utilizzare il servizio di pagamento dell'applicazione tramite un servizio Web. Né un servlet né una pagina JSP sono il luogo appropriato per inserire la logica di consumo.

    In secondo luogo, in questo senso, la maggior parte degli usi di servlet / pagine JSP negli ultimi anni sono stati inseriti nel contesto di un framework come Spring o Struts. Vorrei raccomandare Spring, in quanto offre l'intero stack di ciò che è necessario dalle pagine del server alla logica del gateway del servizio Web ai DAO. Se vuoi capire i dettagli di Spring, consiglierei Spring in Action . Se hai bisogno di capire meglio come classificare un'architettura aziendale scritta in un linguaggio come Java (o C #), consiglierei Patterns of Enterprise Application Architecture di Fowler .

    Sì, questo dovrebbe essere un servlet. Un JSP potrebbe essere più facile da sviluppare, ma un servlet sarà più facile da mantenere. Immagina di dover correggere qualche bug casuale in 6 mesi e provare a ricordare come ha funzionato.

    Nel servlet java i tag HTML sono incorporati nella codifica java.   In JSP le codifiche Java sono incorporate nei tag HTML.

    Per grandi applicazioni per grossi problemi, il servlet è complesso da leggere, comprendere, eseguire il debug, ecc. a causa della illeggibilità dell'inserimento di più tag html all'interno del codice java ... Quindi usiamo jsp.In jsp è facile da capire, il debug, ecc.

    Grazie & amp; Saluti, Sivakumar.j

    Penso che dipenda da te? perché JSP è Java all'interno di HTML e Servlet è un Java che può eseguire l'HTML all'interno

    hmmm ... servlet è più semplice di jsp perché se invii a Servlet e inoltri a un altro JSP non appare alcuna estensione di file e non puoi vedere di che pagina si tratta ..

    ma il vantaggio di JSP è che puoi codificarlo facilmente.

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