De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met.

Verwante presentaties


Presentatie over: "Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met."— Transcript van de presentatie:

1 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met implementatie

2 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 2 1e iteratie Cataloog-pagina  Database: product-tabel C:\mysql\bin>mysql Welcome to the MySQL monitor. Commands end with ; or \g. … mysql> create database ecomm ; … mysql> use ecomm mysql> create table product (product_id integer not null primary key, -> omschrijving char(30), -> omschrijving char(30), -> prijs decimal(12,2)); -> prijs decimal(12,2));… mysql> insert into product values (1, "Dell Dimension 1.0", 999.40); … mysql> insert into product values (2, "Microsoft Mouse 5.0", 10.20); … mysql> insert into product values (3, "SanDisc memory 100 MB", 50.0);

3 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 3 1e iteratie Cataloog-pagina  GUI: cataloog.jsp (later hernoemd tot winkel.jsp) Momenteel alleen nodig: opvulling van cataloog vanuit product-tabel. Zoals gezegd: grootste deel van java-code zal niet-OO tussenlaagcode bevatten die de link legt tussen de GUI en de database.

4 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 4 1e iteratie Cataloog-pagina  ecomm\WEB-INF\classes\db\Dbmethoden.java Analoge code als in les 10 (Books.java) We hebben nodig: connect(), disconnect() en viewProducten()  Pas op dat de database ecomm is: con = DriverManager.getConnection( "jdbc:mysql://localhost/ecomm ?user=root&password="); "jdbc:mysql://localhost/ecomm ?user=root&password=");  viewProducten() haalt gewoon alle records uit de product-tabel: public ResultSet viewProducten() throws SQLException, Exception { ResultSet rs = null; ResultSet rs = null; try{ try{ String queryString = "SELECT * FROM Product;" ; String queryString = "SELECT * FROM Product;" ; …

5 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 5 1e iteratie Cataloog-pagina  ecomm\WEB-INF\classes\db\Item.java  Eenvoudige klasse die dient als type voor de items in de winkelkar. Intern worden de items in een arraylist ‘kar’ geplaatst.  Bevat voorlopig alleen een constructor en eenvoudige getters omdat dat alles wat tot nu toe nodig is. N.B. items zijn gewoon producten. Maar met één item betekent hier echt één concreet product dat je in je handen kunt houden. Dit is anders dan in de database waar bvb 1 fles Cola, precies 1 record is, terwijl er zo duizenden concrete flessen kunnen bestaan. Het is daarom dat we de onhandige ‘item’ moeten gebruiken.  ecomm\WEB-INF\classes\db\Winkelkar.java  Deze klasse bevat voorlopig niets meer dan een ArrayList voor Item- objecten.  In cataloog.jsp wordt een winkelkar als bean gebruikt met session- scope. De winkelkar blijft dus bestaan voor de duur van de sessie.

6 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 6 1e iteratie Cataloog-pagina  ecomm\WEB-INF\classes\db\cataloog.jsp (wordt later hernoemd tot winkel.jsp)  De linkerzijde bevat de cataloog  De rechterzijde bevat de winkelkar zoals ze in werkelijkheid is: 1 lijn per item in de kar, geen aantallen  Aan de linkerkant kun je producten toevoegen, aan de rechterkant kun je de items weer uit de kar halen.

7 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 7 1e iteratie Cataloog-pagina

8 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 8 Herziening GUI  Oorspronkelijk hadden we de volgende opsplitsing:  cataloog.jsp  winkelkar.jsp  bestelling  Technisch hadden we nooit eerder een bean (winkelkar in winkelkar.jsp) opgevuld vanuit een andere pagina (winkelkar). Daarom dacht ik de winkelkar eerst in de cataloog.jsp-pagina te zetten om te kijken of dit al zou werken. Bij nader toezien lijkt dit wel oké om zo te houden. Het is geen schande om het ontwerp aan te passen na het schrijven van wat code. Het zou erger zijn dit proces te verdoezelen en te doen of je dit vooraf had voorzien.

9 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 9 Herziening GUI  Wijziging:  cataloog.jsp wordt hernoemd tot winkel.jsp winkel.jsp laat zowel de catalogus als de winkelkar zien. De winkelkar heeft ‘dubbels’ zoals in een echte winkelkar. Vanuit deze pagina kun je naar overzicht.jsp gaan. De winkelkar heeft ‘dubbels’ zoals in een echte winkelkar. Vanuit deze pagina kun je naar overzicht.jsp gaan.  overzicht.jsp overzicht.jsp geeft een overzichtelijke lijst van de producten in de winkelkar met aantal stuks per product. Een product met zijn aantal is een Lijn-object. Van hieruit kun je naar bestelling.jsp gaan. overzicht.jsp geeft een overzichtelijke lijst van de producten in de winkelkar met aantal stuks per product. Een product met zijn aantal is een Lijn-object. Van hieruit kun je naar bestelling.jsp gaan.  Bestelling  N.B.: Oorspronkelijk was Item.java eigenlijk Product.java. Zie uitleg slide 5.

10 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 10 cataloog.jsp wordt winkel.jsp

11 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 11 2e iteratie overzicht-pagina  ecomm\WEB-INF\classes\db\Lijn.java  Een Lijn-object bevat een Item-object en een aantal-datafield. Dient als lijn binnen de overzicht- pagina  ecomm\WEB- INF\classes\db\Winkelkar.java  Deze klasse wordt uitgebreid met een overz- datafield die een ArrayList van Lijn-objecten is. Deze overz-arraylist moet constant up to date zijn met de kar-arraylist.

12 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 12 2e iteratie overzicht-pagina  ecomm\WEB-INF\classes\db\Lijn.java (excuses voor de compacte schrijfwijze) package db; public class Lijn{ public Lijn(Item item, int aantal){ public Lijn(Item item, int aantal){ this.item = item; this.item = item; this.aantal = aantal; this.aantal = aantal; } private Item item; private Item item; public Item getItem(){return item;} public Item getItem(){return item;} public int getProduct_id(){ return item.getProduct_id();} public int getProduct_id(){ return item.getProduct_id();} public String getOmschrijving(){ return item.getOmschrijving();} public String getOmschrijving(){ return item.getOmschrijving();} public double getPrijs(){ return item.getPrijs();} public double getPrijs(){ return item.getPrijs();} public double getLijnPrijs(){ return getPrijs() * aantal;} public double getLijnPrijs(){ return getPrijs() * aantal;} private int aantal; private int aantal; public int getAantal(){return aantal;} public int getAantal(){return aantal;} public void verhoogAantal(){aantal++;} public void verhoogAantal(){aantal++;} public void verlaagAantal(){aantal--;} public void verlaagAantal(){aantal--;}}

13 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 13 2e iteratie overzicht-pagina  ecomm\WEB- INF\classes\db\Winkelkar.java … private ArrayList overz; private ArrayList overz; public Lijn getLijn(int pos){ public Lijn getLijn(int pos){ return (Lijn) overz.get(pos); return (Lijn) overz.get(pos); } public int lijnenSize(){ public int lijnenSize(){ return overz.size(); return overz.size(); }…

14 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 14 2e iteratie overzicht-pagina  ecomm\WEB-INF\classes\db\Winkelkar.java (vervolg) private ArrayList kar; private ArrayList kar; public Item get(int pos){ public Item get(int pos){ return (Item) kar.get(pos); return (Item) kar.get(pos); } public void add(Item item){ public void add(Item item){ kar.add(item); kar.add(item); boolean gevonden = false; boolean gevonden = false; for (int i = 0; i < overz.size() && ! gevonden; i++){ for (int i = 0; i < overz.size() && ! gevonden; i++){ Lijn lijn = (Lijn) overz.get(i); Lijn lijn = (Lijn) overz.get(i); if ( lijn.getProduct_id() == item.getProduct_id() ){ if ( lijn.getProduct_id() == item.getProduct_id() ){ gevonden = true; gevonden = true; lijn.verhoogAantal(); lijn.verhoogAantal(); } } if ( ! gevonden ) if ( ! gevonden ) overz.add(new Lijn(item,1)); overz.add(new Lijn(item,1)); }

15 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 15 2e iteratie overzicht.jsp

16 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 16 3e iteratie: bestelling-pagina  Bestelling wordt geïdentificeerd met de session-id, die eventueel later kan ingegeven worden om de toestand van de bestelling te checken.  Eerst proberen we gewoon de bestelling te bewaren zonder ons iets aan te trekken van wie die bestelling gedaan heeft. We crëeren dus bestellingen zonder klanten (in tegenstelling tot ons database-model)  Later breiden we uit met klanteninformatie (4e iteratie). Zo hadden we het ook gemodelleerd:  Een bestelling kan niet bestaan zonder zijn klant

17 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 17 3e iteratie: bestelling-pagina  Database: bestelling-tabel Klant_id en date mogen voorlopig null zijn. In de derde iteratie MOET klant_id een bestaande klant zijn. Bestelling_id zal de sessionID bevatten Klant_id en date mogen voorlopig null zijn. In de derde iteratie MOET klant_id een bestaande klant zijn. Bestelling_id zal de sessionID bevatten C :\mysql\bin>mysql mysql> use ecomm mysql> create table bestelling( -> bestelling_id CHAR(50) NOT NULL PRIMARY KEY, -> bestelling_id CHAR(50) NOT NULL PRIMARY KEY, -> klant_id integer, datum date); -> klant_id integer, datum date);  Database: besteldproduct-tabel mysql> create table besteldproduct ( bestelling_id CHAR(50) NOT NULL, -> product_id integer NOT NULL, -> product_id integer NOT NULL, -> aantal integer NOT NULL ); -> aantal integer NOT NULL );

18 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 18 3e iteratie: bestelling-pagina  Database: bestelling-tabel Na enkele bestellingen kunnen we de geregistreerde bestellingen eens bekijken: Na enkele bestellingen kunnen we de geregistreerde bestellingen eens bekijken: mysql> select bestelling.*, besteldproduct.aantal, product.omschrijving -> from bestelling, besteldproduct, product -> from bestelling, besteldproduct, product -> where bestelling.bestelling_id = besteldproduct.bestelling_id AND -> where bestelling.bestelling_id = besteldproduct.bestelling_id AND -> besteldproduct.product_id = product.product_id -> besteldproduct.product_id = product.product_id -> order by bestelling.bestelling_id, product.omschrijving; -> order by bestelling.bestelling_id, product.omschrijving; | bestelling_id | klant_id | datum | aantal | omschrijving +----------------------------------+----------+-------+--------+---------------- | 5D1547BB747B37970DF20C00AD666574 | NULL | NULL | 1 | Dell Dimension | 5D1547BB747B37970DF20C00AD666574 | NULL | NULL | 3 | Microsoft Mouse | 5D1547BB747B37970DF20C00AD666574 | NULL | NULL | 1 | SanDisc memory | 8A70C2ED57F89D20E6C704844427FEAD | NULL | NULL | 3 | Microsoft Mouse | 8A70C2ED57F89D20E6C704844427FEAD | NULL | NULL | 1 | SanDisc memory | C0BC4C95DC107632D04AD5DD70FBD3CB | NULL | NULL | 4 | Dell Dimension | CBDA50D51482DFA26518381687D21FC8 | NULL | NULL | 5 | Dell Dimension | CBDA50D51482DFA26518381687D21FC8 | NULL | NULL | 2 | Microsoft Mouse +----------------------------------+----------+-------+--------+----------------

19 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 19 3e iteratie: bestelling-pagina  Dbmethoden.java: public void addBestelling(Winkelkar winkelkar, String sessionId) throws SQLException, Exception { public void addBestelling(Winkelkar winkelkar, String sessionId) throws SQLException, Exception { if (con != null) { if (con != null) { try{ try{ PreparedStatement updateBestelling; PreparedStatement updateBestelling; updateBestelling = con.prepareStatement( updateBestelling = con.prepareStatement( "INSERT INTO bestelling VALUES(?,NULL,NULL)"); "INSERT INTO bestelling VALUES(?,NULL,NULL)"); updateBestelling.setString(1,sessionId); updateBestelling.setString(1,sessionId); updateBestelling.execute(); updateBestelling.execute(); PreparedStatement updateBesteldProduct; PreparedStatement updateBesteldProduct; for (int i = 0; i < winkelkar.lijnenSize(); i++ ){ for (int i = 0; i < winkelkar.lijnenSize(); i++ ){ Lijn lijn = winkelkar.getLijn(i); Lijn lijn = winkelkar.getLijn(i); updateBesteldProduct = con.prepareStatement( updateBesteldProduct = con.prepareStatement( "INSERT INTO besteldproduct VALUES(?,?,?)"); "INSERT INTO besteldproduct VALUES(?,?,?)"); updateBesteldProduct.setString(1,sessionId); updateBesteldProduct.setString(1,sessionId); updateBesteldProduct.setInt(2,lijn.getProduct_id()); updateBesteldProduct.setInt(2,lijn.getProduct_id()); updateBesteldProduct.setInt(3,lijn.getAantal()); updateBesteldProduct.setInt(3,lijn.getAantal()); updateBesteldProduct.execute(); updateBesteldProduct.execute(); } …

20 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 20 3e iteratie: bestelling-pagina

21 Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 21 4e iteratie: klant-gegevens  Voorlopig zien we het zo:  userid, paswoord combinatie bestaat  bestelling wordt toegevoegd aan de database  userid bestaat, paswoord niet  foutpagina  userid bestaat niet  Klantgegevens worden opgevraagd  klant wordt toegevoegd  bestelling wordt toegevoegd aan de database


Download ppt "Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met."

Verwante presentaties


Ads door Google