+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

java - codice di una servlet java richieste http di tipo: GET

  1. #1
    Uccio87 non è in linea Scolaretto
    Salve dovrei svolgere questo esercizio:
    Scrivere il codice di una Servlet Java che gestisce richieste HTTP del tipo: GET
    http://localhost:8080/MyShop?user= u & prod=p&op=act gestendo act (operazione
    richiesta dall’utente) nel seguente modo:
    • se act = “acquista” invia il controllo alla Servlet “Acquisti” che gestisce
    gli acquisti
    • se act =”visualizzaProdotto” include il risultato dell’invocazione della
    Servlet “Prodotto”, che mostra i dettagli del prodotto p.
    • altrimenti invia il controllo alla pagina “home.html”

       
    public class MyShop extends HttpServlet {
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
        
            String act = request.getParameter("op"); //ottendo dalla richiesta il contenuto di op
            HttpSession session = request.getSession(true); //nuova sessione
            session.setAttribute("user",a);
    
           if (act.equals("acquista")) {
                         ServletContext sc;
              sc=getServletContext(); 
              RequestDispatcher rd;
              rd=sc.getRequestDispatcher("/servlet/Acquisti");
              rd.include(request, response);
           }
        if(act.equals("visualizzaProdotto")) {
    
    
            ServletContext sc;
               sc=getServletContext(); 
               RequestDispatcher rd;
               rd=sc.getRequestDispatcher("/servlet/Prodotto");
               rd.include(request, response);
        }
    
    
        else
             request.getRequestDispatcher("home.html").forward(request, response);
    
       }
    }
    
    Quanti errori faccio? e quali?
    Grazie

  2. #2
    Uccio87 non è in linea Scolaretto
    a me interessa sapere se quello che faccio concettualmente è giusto!?

  3. #3
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    La include piazza nella risposta il contenuto di una specifica risorsa (che comunque viene richiamata e può essere una servlet), la forward "passa la palla" altrove... avrei utilizzato, giusto a rigor di logica, la include per la home.html e la forward per navigare sulle altre servlet, ma non è sbagliato anche quello che hai scelto di fare tu.

    Ricorda sempre che in mancanza di una opportuna return; la servlet attuale prosegue tranquillamente nella sua esecuzione. Al termine della inclue o della forward puoi in effetti smettere di processare risparmiando controlli ulteriori.

    In alternativa si poteva passare altrove la request con una response.sendRedirect (che però provoca l'ottenimento di un HTTP status 302 - permanent redirect) eventualmente (ri)creando la query string.

    In sostanza comunque il concetto è quello che hai immaginato.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  4. #4
    Uccio87 non è in linea Scolaretto
    Quote Originariamente inviato da bottomap Visualizza il messaggio
    Ciao,

    La include piazza nella risposta il contenuto di una specifica risorsa (che comunque viene richiamata e può essere una servlet), la forward "passa la palla" altrove... avrei utilizzato, giusto a rigor di logica, la include per la home.html e la forward per navigare sulle altre servlet, ma non è sbagliato anche quello che hai scelto di fare tu.

    Ricorda sempre che in mancanza di una opportuna return; la servlet attuale prosegue tranquillamente nella sua esecuzione. Al termine della inclue o della forward puoi in effetti smettere di processare risparmiando controlli ulteriori.

    In alternativa si poteva passare altrove la request con una response.sendRedirect (che però provoca l'ottenimento di un HTTP status 302 - permanent redirect) eventualmente (ri)creando la query string.

    In sostanza comunque il concetto è quello che hai immaginato.

    Ciaociao
    Grazie per la risposta!

    forse non sarebbe meglio così?

    quando mi chiede: - se act = “acquista” INVIA il controllo alla Servlet “Acquisti” che gestisce
    gli acquisti è giusto fare così?

           if (act.equals("acquista")) {
                         ServletContext sc;
              sc=getServletContext(); 
              RequestDispatcher rd;
              rd=sc.getRequestDispatcher("/servlet/Acquisti");
              rd.forward(request, response);
           }
    
    invece quando mi chiede: - se act =”visualizzaProdotto” INCLUDE il risultato dell’invocazione della Servlet “Prodotto”, che mostra i dettagli del prodotto p. e' giusto fare così?


        if(act.equals("visualizzaProdotto")) {
    
    
            ServletContext sc;
               sc=getServletContext(); 
               RequestDispatcher rd;
               rd=sc.getRequestDispatcher("/servlet/Prodotto");
               rd.include(request, response);
        }
    
    cioè il mio dubbio è sull'uso del forward o del include!?

  5. #5
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Come ti ho scritto più sopra, a rigor di logica avrei usato la forward per le servlet e la include per la home.html.

    In entrambi i casi, comunque, effettui un passaggio ad altra risorsa. La differenza e che nel caso della include la risposta viene inclusa nella response della servlet attuale. Nel caso della forward, invece, avviene effettivamente il passaggio altrove.
    Sulla barra del browser, nel caso della include non dovresti veder cambiare l'url. Nel caso della forward dovresti invece vederlo cambiare.

    La servlet di destinazione, sia con la forward che con la include, viene eseguita... per cui tutto dipende da cosa si intenda per "INVIA il controllo"... o, meglio, per "controllo".

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  6. #6
    Uccio87 non è in linea Scolaretto
    se devo sviluppare:
    GET http://localhost:8080/Negozio?utente= u & item=it & action=act
    se act =”viewProduct” accede al database “catalogue”, recupera
    dalla tabella PRODUCTS(ProdID, ProductName, Description, Price) il
    nome e la descrizione del prodotto it e la visualizza su pagina web

    come faccio?
            
     if(act.equals("viewProduct")) {
            String ur = "jdbc:mysql://localhost/catalogue";
            String us = "root";
            String p = "root";
    
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                Connection connessione = DriverManager.getConnection(ur, us, p);
                Statement statement = connessione.createStatement();
                String SQL = "SELECT ProductName, Description FROM PRODUCTS WHERE ProductName = '" + this.it + "'";
                 ResultSet risultato = statement.executeQuery(SQL);
                 
                 while (risultato.next()) {
                   \\come faccio a visualizzare su pagina web??????
                }
    }
    
    E' giusto quello che sto facendo???
    come faccio a visualizzare su pagina web??????

    Grazie

  7. #7
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    \\come faccio a visualizzare su pagina web??????
    Scrivendo sulla response... nel caso di una servlet basta che utilizzi:
    PrintWriter out=response.getWriter();
    // e poi scrivi quello che ti interessa
    out.println("<HTML>");
    out.println("<HEAD>");
    out.println("<TITLE>"+titolo+"</TITLE>");
    ..
    out.println("eccetera eccetera");
    ...
    
    Se invece lavori con una jsp (che è essa stessa una servlet) hai già a disposizione l'oggetto di nome out (di tipo PrintWriter):
    <html>
    <head>
    <title><% out.println(titolo); %></title>
    <%
    ...
    eccetera eccetera
    ...
    %>
    
    Quello che mi risulta strano è:
    if(act.equals("viewProduct")) {
    Se non erro stiamo già lavorando sulla servlet di atterraggio... a che pro verificare di nuovo il contenuto di act? Per rafforzare la sicurezza? Oppure prevedi che la servlet risponderà a più comandi?

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  8. #8
    Uccio87 non è in linea Scolaretto
    while (risultato.next()) {                
               \\così ad esempio???     
                 PrintWriter out = response.getWriter();
                 String risultati=request.getQueryString();
                out.println("<HTML><Head><Title>Connection DB</Title></Head>");
                out.println("<Body><H1>Servlet</H1>");
                out.println("<p>"+"The query string is:"+"<br>"+risultati+"</p>");
                out.println("</body></html>");
    }
    

  9. #9
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao,

    Si... magari eviterei di istanziare un nuovo printwriter ed una nuova String all'interno di un ciclo che gira il resultset... la cosa ha poco senso... dichiarali piuttosto fuori dai cicli.

    Inoltre il codice che hai scritto scrive (sempre per via del ciclo) N volte nella pagina <html><head> eccetera eccetera (e stampa n volte la stessa cosa - request.getQueryString è la stringa con i parametri GET ricevuti).

    Dimenticavo, per sicurezza, quando hai finito di scrivere sulla response usa:
    out.flush();
    out.close();
    
    in modo da chiudere correttamente lo stream.

    Ciaociao
    ℹ️ Leggi di più su bottomap ...

  10. #10
    Uccio87 non è in linea Scolaretto
    quindi sarebbe meglio evitare il while?
    facendo così?
     if(act.equals("viewProduct")) {
            String ur = "jdbc:mysql://localhost/catalogue";
            String us = "root";
            String p = "root";
    
                DriverManager.registerDriver(new com.mysql.jdbc.Driver());
                Connection connessione = DriverManager.getConnection(ur, us, p);
                Statement statement = connessione.createStatement();
                String SQL = "SELECT ProductName, Description FROM PRODUCTS WHERE ProductName = '" + this.it + "'";
                 ResultSet risultato = statement.executeQuery(SQL);
                 
                 PrintWriter out = response.getWriter();
                 String risultati=request.getQueryString();
                out.println("<HTML><Head><Title>Connection DB</Title></Head>");
                out.println("<Body><H1>Servlet</H1>");
                out.println("<p>"+"The query string is:"+"<br>"+risultati+"</p>");
                out.println("</body></html>");
               
               out.flush();
               out.close();
              connessione.close();
     
    }
    

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 0
    Ultimo Post: 04-06-2011, 15:45
  2. [java] servlet e tomcat
    Da Uccio87 nel forum Java
    Risposte: 1
    Ultimo Post: 12-04-2011, 21:33
  3. Risposte: 6
    Ultimo Post: 27-06-2007, 16:40
  4. [Java]servlet e javax.comm
    Da lucari nel forum Java
    Risposte: 2
    Ultimo Post: 27-05-2006, 12:01
  5. [Java]JSP e Servlet
    Da silsimo nel forum Java
    Risposte: 3
    Ultimo Post: 27-05-2006, 11:54