Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JSP] Codice query nella pagina o fuori?

    Ciao a tutti, una domanda abbastanza basilare (forse):
    Mettiamo che in una pagina jsp io debba fare una query da una tabella PERSONE e debba, con un while, visualizzare in una tabella i nomi in una colonna e i cognomi in un'altra colonna.
    In linea di massima dovrò fare qualcosa del tipo:

    codice:
    <%
    Connection c=...
    Statement st=...
    ResultSet rs=...
    %>
    
    <table>
    
    <% while  (rs.next()){ %>
    
    <tr> <td> nomi </td>  <td> cognomi</td> </tr>
    <tr><td> <%= rs.getString("NOME")%> </td> <td> <%= rs.getString("COGNOME")%> </td>
    
    <% i++; %>
    <% }%>
    La mia domanda semplicemente è: si usa mettere direttamente la connessione, la query e tutto il resto nella jsp o è bene creare un metodo che esegua la query in modo da non avere troppo codice nella jsp? E, nel caso, cosa dovrebbe restituire questo metodo? Creare un metodo che restituisca una stringa con tr e td concatenati ai valori non è troppo macchinoso e poco leggibile?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JSP] Codice query nella pagina o fuori?

    Originariamente inviato da Lasentinella
    La mia domanda semplicemente è: si usa mettere direttamente la connessione, la query e tutto il resto nella jsp o è bene creare un metodo che esegua la query in modo da non avere troppo codice nella jsp?
    Come hai scritto il codice, sebbene molto abbozzato ... bello/pulito non lo è di certo. Ma perché c'è un mix di "presentazione" e di operazioni/elaborazioni (compresa gestione eccezioni e altro) che rende la pagina lunga, fumosa e anche poco manutenibile.

    Cercare di incapsulare il più possibile le operazioni sfruttando classi/metodi fatti ad hoc da te e poi invocarli ancora dalla jsp sarebbe un passettino più avanti rispetto alla situazione detta prima. Ma non sarebbe ancora ottimale perché dovresti comunque mettere dello "scriptlet" ( <% ...%> e/o <%= ... %> ) nella pagina. Cosa che invece si dovrebbe cercare di evitare.

    La soluzione ottimale sarebbe che la request venga innanzitutto gestita da una "servlet". La servlet può usare tutto quello che vuole, classi "helper", classi dedicate al DAO (pattern data access object) o altro per fare le interrogazioni ed elaborazioni che servono.
    Se non ci sono errori si dovrebbero preparare degli oggetti "bean" insieme eventualmente a delle strutture dati (es. per mostrare un elenco di persone, un java.util.ArrayList di oggetti Persona) da settare come "attributi" in uno scope (tipicamente il request scope ma in certi casi il session scope) e poi fare un "forward" alla pagina JSP predisposta per mostrare i dati.

    La JSP si occuperebbe solo ed esclusivamente di presentare i dati. E può usare preferibilmente dei custom tag come quelli di JSTL (o altra tag library) per iterare e mandare in output i dati in modo appropriato, prendendo in considerazione le questioni di escape.

    Tieni infatti presente che fare <%= rs.getString("NOME")%> non è molto sicuro. Non per il fatto di usare direttamente rs.getXXX ma perché una expression "butta" in output la stringa così come è, senza alcun escape.
    In XML/HTML ci sono caratteri speciali, se quel campo NOME contiene "Tizio & Caio" la tua pagina risulta malformata nei confronti di HTML.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: [JSP] Codice query nella pagina o fuori?

    Originariamente inviato da andbin
    Come hai scritto il codice, sebbene molto abbozzato ... bello/pulito non lo è di certo. Ma perché c'è un mix di "presentazione" e di operazioni/elaborazioni (compresa gestione eccezioni e altro) che rende la pagina lunga, fumosa e anche poco manutenibile.
    Essì, immaginavo

    Cercare di incapsulare il più possibile le operazioni sfruttando classi/metodi fatti ad hoc da te e poi invocarli ancora dalla jsp sarebbe un passettino più avanti rispetto alla situazione detta prima. Ma non sarebbe ancora ottimale perché dovresti comunque mettere dello "scriptlet" ( <% ...%> e/o <%= ... %> ) nella pagina. Cosa che invece si dovrebbe cercare di evitare.
    (non quoto tutta la parte successiva che però ho letto, è interessantissima e penso che poi me la guarderò per conto mio lo stesso)
    il fatto è che gran parte di ciò che parli non l'abbiamo fatto..nel senso: abbiamo studiato l'architettura MVC, quindi c'è un controller(servlet) che si occupa di "instradare" le operazioni tra pagine varie, e utilizziamo i bean, però ad esempio JSTL non l'abbiamo visto, abbiamo visto solo come iterare col while utilizzando gli rs.getString().
    Per questo motivo mi chiedevo se avesse senso creare un metodo che restituisse direttamente la stringa formattata coi tag html
    Per conto mio penso che poi mi vedrò le cose che hai detto, che restano

  4. #4
    Oddio, l'ultima riga era da copiare e incollare sopra, sembra stessi delirando

    Ho chiesto ad altri ragazzi che devono fare lo stesso progetto e hanno detto che date le nostre conoscenze l'unica cosa da fare è creare un bean che contenga dei metodi per effettuare le query che restituiscano una stringa contenente sia i risultati che i vari tag td,tr e così via..tutta la visualizzazione e formattazione, insomma, da inserire direttamente nella jsp.
    Un'ultima domandina veloce e poi non disturbo piu': i bean devono avere al loro interno solo metodi chiamati get e set o posso chiamarli come voglio (ovviamente per stare agli "standard")?
    Cioè, va bene creare un bean "Utilities" e inserirci dentro metodi come "queryStudenti(..)" - "queryProfessori(...)" e cosi' via?


  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lasentinella
    Ho chiesto ad altri ragazzi che devono fare lo stesso progetto e hanno detto che date le nostre conoscenze l'unica cosa da fare è creare un bean che contenga dei metodi per effettuare le query che restituiscano una stringa contenente sia i risultati che i vari tag td,tr e così via..tutta la visualizzazione e formattazione, insomma, da inserire direttamente nella jsp.
    Un'ultima domandina veloce e poi non disturbo piu': i bean devono avere al loro interno solo metodi chiamati get e set o posso chiamarli come voglio (ovviamente per stare agli "standard")?
    Cioè, va bene creare un bean "Utilities" e inserirci dentro metodi come "queryStudenti(..)" - "queryProfessori(...)" e cosi' via?
    Mettiamola così, se si vuole escludere a priori (per motivi didattici o di scarsa conoscenza) le servlet e l'uso di standard/custom tag (JSTL o altro) nella pagina JSP, un modo tutto sommato semplice per gestire le interrogazioni dalla JSP cercando comunque di separare il più possibile presentazione e logica/elaborazioni, si potrebbe riassumere con il seguente esempio (elenco di persone come dimostrazione):

    codice:
    .....
    <%
    PersonaDAO personaDAO = new PersonaDAO();
    
    List listaPersone = personaDAO.trovaPersoneTraAnniNascita(annoNascitaMinimo, annoNascitaMassimo);
    %>
    
    <table>
    <%
    for (int i = 0; i < listaPersone.size(); i++) {
        Persona persona = (Persona) listaPersone.get(i);
    %>
    <tr>
      <td><%= HtmlUtils.escape(persona.getNome()) %></td>
      <td><%= HtmlUtils.escape(persona.getCognome()) %></td>
      <td><%= persona.getAnnoNascita() %></td>
    </tr>
    <% } %>
    </table>
    ....
    Tenendo presente:
    1) Il tutto da completare con gli opportuni import e con la gestione degli errori (da valutare come farla).
    2) HtmlUtils.escape come esempio fittizio di classe/metodo apposito per fare l'escape dei caratteri speciali. In rete esistono librerie esterne già fatte specifiche per HTML o più in generale per le stringhe in grado di fare questo tipo di conversioni.

    Purtroppo non è ancora il massimo come ho ampiamento descritto prima. Ma viste le condizioni (no servlet, no custom tag) mi pare il minimo per fare le cose almeno in modo non troppo caotico!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Perfetto, sei stato davvero chiarissimo
    Grazie infinite per l'aiuto, iniziero' a lavorarci su!!!!!!!!





Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.