Jsp Negozio su Eclipse

di il
27 risposte

Jsp Negozio su Eclipse

Salve,

ho una jsp che deve visualizzare i prodotti di un negozio attraverso un for each che prende i dati da un database in oracle e li mette in una tabella, vorrei che comparisse ad esempio : nome , marca , prezzo e un immagine del prodotto.
Per quanto riguarda i primi tre l'operazione è semplice ma non ho ben capito come associare le immagini alle antry della tabella...

27 Risposte

  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    Per quanto riguarda i primi tre l'operazione è semplice ma non ho ben capito come associare le immagini alle antry della tabella...
    Beh, dipende: cosa hai nella colonna della tabella DB per la immagine? Già un url completo? Un nome di file (con/senza path)? Un BLOB con lo stream di byte della immagine? (nota: se un BLOB e ci fossero tipi di immagini differenti es. .png, .gif ecc.. sarebbe bene poterli distinguere).
    Precisa e vediamo ...
  • Re: Jsp Negozio su Eclipse

    Vorrei sapere se apparte i blob è possibile in qualche modo associare un immagine a una voce della tabella del database e riportarla nella mia jsp
  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    Vorrei sapere se apparte i blob è possibile in qualche modo associare un immagine a una voce della tabella del database e riportarla nella mia jsp
    Se metti un BLOB, vuol dire che lo stream di byte stesso della immagine è fisicamente nel record della tabella. Se non metti un BLOB, vuol dire che la immagine la devi mettere fisicamente da qualche parte (su file-system, generalmente). E a quel punto nel record si mette di norma un nome di file con/senza path. Le immagini saranno da qualche parte su file-system (dentro l'applicazione o fuori dall'applicazione) e sarà ovviamente la applicazione a sapere come rintracciare e comporre un percorso appropriato per "aprire" in lettura la immagine.

    Ma che ci sia un BLOB o non BLOB, le cose NON cambiano. Quando stai generando la pagina, NON puoi mandare nulla subito della immagine. Il browser prima fa una request HTTP per la pagina HTML, POI dopo per ciascuna immagine farà una request HTTP apposita.

    Se le immagini fossero dentro l'applicazione e servibili direttamente su HTTP, allora puoi mettere un <img> con il src che punta direttamente alla immagine.
    Se non sono direttamente accessibili (quindi: BLOB, file altrove su file-system), allora la cosa più logica è mettere un <img> con il src che è un url che farà eseguire qualcosa lato server (es. una Servlet). E con un parametro per identificare la immagine (tipicamente il ID del record).

    <img src="blabla/download-image.do?id=NNNN">

    Dove quel url di esempio blabla/download-image.do sarà "mappato" su una risorsa lato server es. Servlet. La Servlet estrae il parametro id, fa una query su DB per ottenere quel record e poi:
    - se da BLOB, fa lo streaming del contenuto del BLOB nella response
    - se da file ovunque su file-system, apre il file e fa lo streaming del contenuto del file nella response

    In entrambi i casi è bene settare i soliti header: Content-Length, Content-Type ecc..
  • Re: Jsp Negozio su Eclipse

    Perfetto , ho risolto con un altro tipo di sistema, volevo sapere come faccio a creare un carrello per questo negozio.

    Praticamente vorrei che quando clicchi aggiungi al carrello, il prodotto venga aggiunto e quando clicco su "carrello" venga visualizzata una tabella con tutti i prodotti che ho aggiunto.
    Per poi procedere con il pagamento.

    Devo utilizzare un approccio servlet/jsp ?
    o posso utilizzare altri metodi?
  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    Praticamente vorrei che quando clicchi aggiungi al carrello, il prodotto venga aggiunto e quando clicco su "carrello" venga visualizzata una tabella con tutti i prodotti che ho aggiunto.
    Per poi procedere con il pagamento.

    Devo utilizzare un approccio servlet/jsp ?
    o posso utilizzare altri metodi?
    Se usi solo Servlet/JSP e nessun altro framework di più alto livello, certamente dovrai fare qualcosa con una (almeno) Servlet e/o JSP per la gestione del carrello. Insomma il livello è quello Servlet/JSP.

    Ma devi prima stabilire DOVE tenere i dati del carrello. Ci sono varie opzioni:
    - sul server in "sessione"
    - sul client nei cookie
    - sul client nel WebStorage di HTML5

    Se stanno sul client, ad un certo momento dovranno comunque passare al server in qualche modo per procedere all'ordine.

    Ma devi anche pensare come deve essere il "flusso" delle azioni per aggiungere e poi visualizzare il carrello.
    Ad esempio, partendo dall'inizio: hai una pagina con la lista di prodotti e clicchi su un "Aggiungi nel carrello" (o quello che è). Cosa vuoi che succeda? Che il client carichi un'altra pagina ad esempio proprio la pagina del carrello mostrando il prodotto aggiunto? Allora sarebbe un classico flusso: Servlet invocata per aggiungere il prodotto nel carrello poi forward alla JSP del carrello.

    Altrimenti ci sono altri modi. Se si usano framework lato client (es. JQuery, Angular ecc...) quando si clicca su "Aggiungi nel carrello" si può fare una richiesta asincrona al server per aggiungere il prodotto nel carrello. La pagina lato client NON cambia. Al massimo si mostra un popup "prodotto aggiunto ecc..." con magari un link al carrello o comunque poi l'utente va al carrello in altro modo.
  • Re: Jsp Negozio su Eclipse

    Perfetto grazie , e se io volessi aggiungere una barra di ricerca che cerca i prodotti nel vettore cosa dovrei fare?
  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    se io volessi aggiungere una barra di ricerca che cerca i prodotti nel vettore cosa dovrei fare?
    Stesse considerazioni simili a prima: vuoi un campo testo e un pulsante "cerca" al cui click viene eseguito il submit di un form che fa eseguire una Servlet che fa poi un forward alla pagina di elenco prodotti aggiornata secondo la ricerca? (quindi caricare una nuova pagina)
    O vuoi che la pagina non cambi e al click del pulsante venga fatta una request asincrona che fornisce i dati e poi tramite scripting lato client aggiorni la pagina stessa? (serve sicuramente una risorsa lato server es. Servlet ma anche lato client servono librerie/framework specifici)
  • Re: Jsp Negozio su Eclipse

    Salve, praticamente io ho questa jsp , con la funzione di shop , praticamente ho utilizzato un for per ciclare tutti gli elementi dei prodotti inseriti in una tabella di oracle.

    praticamente vorrei capire come :
    tenere in memoria tutti i prodotti su cui ho cliccato aggiungi , una volta che clicco l'icona del carrello, passarli a una servlet che elabora il mio ordine , e poi mi fa visualizzare un altra jsp dove compare una tabella con tutti i prodotti che ho ordinato e semplicemente i tasti "paga" e "annulla", è uno scenario realizzabile alternando servlet/jsp o devo ricorrere a funzioni migliori? se si come ?
    
    
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
         <%@page import="it.unirc.twd.BuyeDrink.prodotto.Prodotto" %>
          <%@page import="java.util.Vector"%>
          <%@page import="it.unirc.twd.BuyeDrink.prodotto.ProdottoDAO" %>
          <%@page import="java.util.ArrayList"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>SHOP</title>
    <%@ include file="/header.jsp"%>
    	
        	<link rel="stylesheet" href="assets/css/Shop.css">
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    
    
    
    </head>
    <body>
    
    <%
    Vector<Prodotto>prodotti= (Vector<Prodotto>)request.getAttribute("prodotto");
    %>
    
    	
    			
    
    
    
    
    <div class="wrapper">
        <div>
         <h1> I NOSTRI PRODOTTI </h1>  
         <br>
         <br>
          <img alt="#" src="images/carrello.png" style="width: 10%; ">
    </div>
         
         
    
        <div class="clear"></div>
        <!-- items -->
        <% for(Prodotto p1:prodotti){ 
        String linkimmagine = ("Prodotti/"+p1.getCodice()+".jpg");
        %>
        
        
        <div class="items">
            <!-- single item -->
            <div class="item">
            
    		<div class="zoom pic">
                <img src= "<%= linkimmagine %>" alt="item" width= "200px" height="200px" />
                </div>
                 <h2> <%= p1.getMarca()  %> , <%= p1.getNome()  %> </h2> 
                <p> Disponibili : <%= p1.getQuantitá()  %> <br>
                Prezzo : <em><%= p1.getPrezzo()  %>  </em>  </p>     
          		<button class="aggiungi" type="button" > Aggiungi </button>
      		
      			</div>
    
    
    <% } %>
          
    	</div>
    	</div>
    
    
    
    
    </body>
    </html>
    
    
  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    praticamente ho utilizzato un for per ciclare tutti gli elementi dei prodotti inseriti in una tabella di oracle.
    Hai usato scriptlet Java ( <% ... %> e <%= ... %> ) per una scelta/imposizione particolare ... o perché non conosci altri modi?
    Sarebbe meglio usare i custom tag di JSTL. Eviteresti svariati problemi e grane (oltre al fatto che lo scriptlet nelle JSP è "brutto").

    Repa235 ha scritto:


    tenere in memoria tutti i prodotti su cui ho cliccato aggiungi
    Li tieni in sessione.

    Repa235 ha scritto:


    una volta che clicco l'icona del carrello, passarli a una servlet che elabora il mio ordine
    Quei button "Aggiungi" che metti dovrebbero ciascuno far eseguire una request (ad una Servlet), possibilmente in POST, passando anche un parametro che in qualche modo identifica il prodotto (es. un "id" se hai una tabella DB dove ogni prodotto ha una chiave primaria)
  • Re: Jsp Negozio su Eclipse

    Purtroppo non conosco altri modi in quanto a lezione abbiamo utilizzato questo metodo, inoltre non capisco come fare a tenere in sessione più attributi una volta cliccato aggiungi.
  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    non capisco come fare a tenere in sessione più attributi una volta cliccato aggiungi.
    Il session scope (così come il request scope, application scope e per le JSP il page scope) è una "mappa" di oggetti identificati ciascuno da una stringa.
    Bene, in sessione ci tieni una lista: di id oppure di oggetti Prodotto. Cosa scegliere dipende da quanto/cosa ci devi fare.
  • Re: Jsp Negozio su Eclipse

    Praticamente al tasto aggiungi dovrei settare un session.setAttribute("id",1) ?
  • Re: Jsp Negozio su Eclipse

    Repa235 ha scritto:


    Praticamente al tasto aggiungi dovrei settare un session.setAttribute("id",1) ?
    In sessione ci tieni una collezione (lista). Di "id" o di oggetti Prodotto, devi valutare tu.
    E tenendo una collezione, la prendi dalla sessione (se non c'è la crei) e ci aggiungi qualcosa.

    Attenzione: il session scope NON è thread-safe. Devi prestare attenzione a fare operazioni in modo che ci sia la dovuta sincronizzazione tra thread.
  • Re: Jsp Negozio su Eclipse

    Inoltre gli oggetti che metti in sessione dovrebbero essere Serializable.

    Comunque, a livello di design, volendo fare una cosa buona, si fa una classe es. Carrello (che contiene la lista) ed è un oggetto Carrello che si tiene in sessione. In questo modo si può facilmente incapsulare in Carrello della logica e anche la sincronizzazione tra thread.
Devi accedere o registrarti per scrivere nel forum
27 risposte