Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Introduzione a jsp

    salve a tutti, sto cominciando a fare qualcosina in jsp.
    dopo che mi sono letto la guida del sito mi sono fatto una pagina che estrapola i dati da un db mysql:
    codice:
    <%@page import="java.sql.*"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Home</title>
        </head>
        <body>
            <%
                        Class.forName("com.mysql.jdbc.Driver");
                        Connection conn = DriverManager.getConnection("jdbc:mysql://...........");
                        Statement stmt = conn.createStatement();
                        ResultSet rs = stmt.executeQuery("SELECT * FROM book INNER JOIN author ON book.author = author.author_id INNER JOIN editor ON book.editor = editor.editor_id INNER JOIN place ON book.place = place.place_id");
            %>
            <table>
                <%
                            while (rs.next()) {
                %>
                <tr>
                    <TD><%=rs.getString("title")%></TD>
                    <TD><%=rs.getString("author_name")%></TD>
                    <TD><%=rs.getString("editor_name")%></TD>
                    <TD><%=rs.getString("price")%></TD>
                    <TD><%=rs.getString("place_name")%></TD>
                </tr>
                <%
                            }
                            stmt.close();
                            conn.close();
                %>
            </table>
        </body>
    </html>
    la pagina funziona ma volevo sapere una cosa.
    è giusto il modo in cui è scritta o è meglio (e possibile) includere tutto ciò che riguarda la connessione in una classe apposita da richiamare e scrivere solo il codice per richiamare ciò che vorrei visualizzare??

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Introduzione a jsp

    Originariamente inviato da fermat
    è giusto il modo in cui è scritta o è meglio (e possibile) includere tutto ciò che riguarda la connessione in una classe apposita da richiamare e scrivere solo il codice per richiamare ciò che vorrei visualizzare??
    io sono un po' contraria alle guide, perché per essere sintetiche tralasciano aspetti di una certa importanza. In ogni caso, sul fatto che è giusto scriverla in un modo anziché in un altro dipende molto e da come si è abituati a programmare e dal livello di preparazione (nel senso che seguire un testo magari ti fa capire meglio il perché di una scelta).
    Riguardo al possibile: prova a mettere in pratica la tua idea, se è possibile funziona.

  3. #3
    riguardo alle guide ti do ragione, anche io preferisco i libri.
    solo che sto proprio all'inizio e nn ho moltissimo tempo.

    cmq, ho provato a fare qualcosina ma senza risultato:
    codice:
    <%@page import="java.sql.*"%>
    <%@page import="operazioni_database.*"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Home</title>
        </head>
        <body>
            <jsp:useBean id="connessione" scope="session" class="Connessione" />
            <jsp:setProperty name="connessione" property="nome" value="Connessione db" />
            <%
                        Connection conn = Connessione.getConnection();
                        Statement stmt = conn.createStatement();
                        ResultSet rs = stmt.executeQuery("SELECT * FROM book INNER JOIN author ON book.author = author.author_id INNER JOIN editor ON book.editor = editor.editor_id INNER JOIN place ON book.place = place.place_id");
            %>
            <table>
                <%
                            while (rs.next()) {
                %>
                <tr>
                    <TD><%=rs.getString("title")%></TD>
                    <TD><%=rs.getString("author_name")%></TD>
                    <TD><%=rs.getString("editor_name")%></TD>
                    <TD><%=rs.getString("price")%></TD>
                    <TD><%=rs.getString("place_name")%></TD>
                </tr>
                <%
                            }
                            stmt.close();
                            conn.close();
                %>
            </table>
        </body>
    </html>
    i parametri di connessione sono un in package che ho importato e provato a richiamare nel useBean ma senza risultato ovviamente:
    codice:
    package operazioni_database;
    
    import java.sql.*;
    import javax.swing.*;
    
    public class Connessione {
    
        static final String DRIVER = "com.mysql.jdbc.Driver";
        static final String DATABASE_URL = "jdbc:mysql://...........";
    
        public static Connection getConnection() throws SQLException {
            Connection conn = null;
            try {
                Class.forName(DRIVER);
                conn = DriverManager.getConnection(DATABASE_URL);
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            }
            return conn;
        }
    }
    sicuramente sbaglio nel settare qualcosa qua:
    <jsp:useBean id="connessione" scope="session" class="Connessione" />
    <jsp:setProperty name="connessione" property="nome" value="Connessione db" />
    quello che nn ho capito è quali di questi parametri sono obbligatori o no e quali hanno valori predefiniti tra cui scegliere.

    ps: nn voglio una spiegazione completa, ma qualche input.
    poi mi comprerò anche un bel libro.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da fermat
    ps: nn voglio una spiegazione completa, ma qualche input.
    poi mi comprerò anche un bel libro.
    beh intanto sul log hai errori? fai la connessione?
    riguardo ai parametri: sono scelte implementative, non c'è una soluzione assoluta, valida in ogni caso.

  5. #5
    eccomi qua dopo vari problemi con tomcat e mac

    la pagina riporta un HTTP status 500 con questo scritto:
    codice:
    type Exception report
    
    message
    
    description The server encountered an internal error () that prevented it from fulfilling this request.
    
    exception
    
    org.apache.jasper.JasperException: /index.jsp(19,8) The value for the useBean class attribute Connessione is invalid.
    	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
    	org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1229)
    	org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1178)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
    	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2411)
    	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2417)
    	org.apache.jasper.compiler.Node$Root.accept(Node.java:495)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2361)
    	org.apache.jasper.compiler.Generator.generate(Generator.java:3440)
    	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:231)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
    	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.
    nessun errore in fase di compilazione, solo in fase di esecuzione.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    The value for the useBean class attribute Connessione is invalid.

    ma domanda: Connessione cosa rappresenta? La connessione al db?
    Ti ricordo che il bean è istanziato tramite il costruttore vuoto in automatico, quindi in quel caso devi ricordarti di istanziare bene l'oggetto

  7. #7
    Connessione rappresenta la classe per la connessione.
    ho visto che ongi bean deve avere i metodi get e set.
    riprendendo da un esempio ho provato a modificare la classe così:
    codice:
    package operazioni_database;
    
    import java.sql.*;
    
    public class Connessione {
    
        static final String DRIVER = "com.mysql.jdbc.Driver";
        static final String DATABASE_URL = "jdbc:mysql://........";
        private static Connection conn = null;
    
        public static Connection getConnection() throws SQLException {
            try {
                Class.forName(DRIVER);
                conn = DriverManager.getConnection(DATABASE_URL);
            } catch (SQLException e) {
                System.out.println(e.getMessage());
            } catch (ClassNotFoundException e) {
                System.out.println(e.getMessage());
            }
            return conn;
        }
    
        public void setConnection(Connection conn) {
            this.conn = conn;
        }
    }
    la index.jsp così:
    codice:
    <%@page import="java.sql.*"%>
    <%@page import="operazioni_database.*"%>
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Home</title>
        </head>
        <body>
            <jsp:useBean id="connessione" scope="session" class="operazioni_database.Connessione" />
            <jsp:getProperty name="connessione" property="conn" />
            <%
                        Connection conn = Connessione.getConnection();
                        Statement stmt = conn.createStatement();
                        ResultSet rs = stmt.executeQuery("SELECT * FROM book INNER JOIN author ON book.author = author.author_id INNER JOIN editor ON book.editor = editor.editor_id INNER JOIN place ON book.place = place.place_id");
            %>
            <table>
                <%
                            while (rs.next()) {
                %>
                <tr>
                    <td><%=rs.getString("title")%></td>
                    <td><%=rs.getString("author_name")%></td>
                    <td><%=rs.getString("editor_name")%></td>
                    <td><%=rs.getString("price")%></td>
                    <td><%=rs.getString("place_name")%></td>
                </tr>
                <%
                            }
                            stmt.close();
                            conn.close();
                %>
            </table>
        </body>
    </html>
    l'errore che mi da adesso è diverso:
    codice:
    org.apache.jasper.JasperException: PWC6054: Cannot find any information on property 'conn' in a bean of type 'operazioni_database.Connessione'
    probabilmente è qua che sbaglio.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    vuoi che la connessione sia unica?
    rendendola statica ogni persona che fa accesso alla tua pagina condivide la connessione.

    Se modelli su bean devi fare:

    1. per ogni proprietà usa get/set
    2. costruttore di default da inserire

    ora prova a fare quello e poi usalo come un oggetto (senza riferirti a roba statica): in questo caso ad ogni accesso hai una connessione (come vuoi che sia per ogni utente).
    Lo scope del bean ti consente di gestire invece la durata della connessione (es session normalmente hai un 20 minuti per fare le tue robe prima di forzare la chiusura della connessione e di andare via).

    Ora secondo me questo proprio su bean da modellare in questo modo non è correttissimo (restano problemi di gestione della connessione al database).

    Non sono ferratissima su questi argomenti, ma rifletti su questo approccio.
    Ti ricordo inoltre che con j2ee (dove gestisci direttamente l'accesso al db)questo problema è risolto dal container che crea un pool di connessione che riusa (appunto c'è un gestore delle connessioni)

  9. #9
    uhm ho più o meno capito.

    vedrò che riesco a fare.

    ps: un buon libro su jsp anche in inglese da consigliarmi ce l'hai??

  10. #10
    visto che ho un pò di tempo torno sull'argomento.
    ho questa classe:
    codice:
    public class Leggi {
    
        private String i = null;
        private String e = null;
        private String u = null;
        private String c = null;
        private String d = null;
        private String line = null;
    
        public String getLine() {
            return line;
        }
    
        public String leggi() {
    
            int numcolonne = 0;
            String nomecolonne = "";
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            ResultSetMetaData rsmd = null;
            try {
                conn = Connessione.getConnection();
                stmt = conn.createStatement();
                rs = stmt.executeQuery("select * from movimenti");
                rsmd = rs.getMetaData();
                numcolonne = rsmd.getColumnCount();
                for (int i = 1; i <= numcolonne; i++) {
                    nomecolonne += rsmd.getColumnLabel(i) + ": ";
                }
    
                while (rs.next()) {
                    i = rs.getString(1);
                    e = rs.getString(2);
                    u = rs.getString(3);
                    c = rs.getString(4);
                    d = rs.getString(5);
                    line += i + ": " + e + ", " + u + ", " + c + ", " + d + "\n";
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            } finally {
                try {
                    rs.close();
                    stmt.close();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
                return nomecolonne + "\n" + line;
            }
        }
    }
    i parametri di connessione sono in Connessione.getConnection e sono giusti.
    nella jsp ho fatto così:
    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <jsp:useBean id="connection" scope="page" class="operazioni_database.Leggi" />
            <jsp:getProperty name="connection" property="line" />
            <% out.println(connection.getLine()); %>
        </body>
    </html>
    ottengo solo null null.
    dove intoppo??

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.