Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Finora abbiamo creato uno schermo con un campo di input e 3 pulsanti per la registrazione, le spesee il report. Registrati mostra gli utenti registrati nella banca dati. Tuttavia questi utenti eranoregistrati utilizzando MySQL dal prompt dei comandi.
Il passo successivo è quello di provare a registrare un utente dal browser invece che è un'aspettativaragionevole per un utente dell'applicazione web. L'aggiornamento del database e l'affrontare l'input dell'utenteriunisce diverse nuove problematiche, come ad esempio;1. Ogni volta che un nuovo utente viene richiesto di essere registrato, verificare se l'username giàesiste e dovrebbero scegliere un nuovo username.2. Inserisca le spese: se, per errore, una spesa extra o errata viene aggiunta alla tabella spese, deve essere progettata una funzionalità extra di essere in grado di modificare o cancellare unariga precedentemente inserita.
Per ottenere questo, utilizzeremo una combinazione di strutture di database e renderemo determinatemodifiche all'app esistente.
Considerare il seguente programma di test semplice: insertdb.java, dove cerchiamo di inserire record inil database.
La maggior parte delle istruzioni è familiare.● Noi creiamo una connessione al database utilizzando il driver di database e l'istruzione ha la queryda eseguire sul database nptel specificato nell'url utilizzando lo standard jdbc.● Il blocco try ha rv=stmt.executeUpdate (“ inserire in users2valori (0,2, f1) ”);● Anche questa è una semplice query di aggiornamento, potrebbe sorgere l'importante differenza rispetto agli scenari precedenti, dato che stiamo aggiornando il database (a differenza di querelare dove siamoletti solo dal database). Bisogna catturare eccezioni utilizzando l'oggetto standardSQLException che ha molte informazioni.● L'oggetto SQLException ha un messaggio, stato SQL, codice di errore e un campo di causa. Lo stato SQLè uno standard di linguaggio SQL.
● Nella pagina web MySQL possiamo trovare la mappatura dei numeri di errore MySQL in codice SQL stato.● Ci incontreremo 42S02 nella webapp creata fino ad ora, cheER_BAD_TABLE_ERROR.● Stampa il messaggio e chiudiamo il database.Questo è solo un programma di test. Compila il file insertdb.java utilizzando javac insertdb.javaed esegui tramite insertdb java. Otteniamo questo messaggio di errore:
Il messaggio di errore: Tabella &ld'ultimo nptel.users2 n ° doesn t esiste.Questo perché non l'abbiamo ancora creato. Questo motivo per eseguirlo prima di creare era adimostrare la descrizione dell'errore.
Il testo evidenziato ha un campo di messaggi di oggetto SQLException. Lo stato è uno standardda SQL, il valore è 42S02 come previsto. MariaDB inoltre s MySQL ha anche codici di stato che spieganoil tipo di errore, in questo caso il suo valore è 1146.
Per correggere l'errore, creare una tabella users2.
Ora eseguire insertdb utilizzando java insertdb, outmette rv=1. Questo è il numero di righe in
users2. Questo significa che la query di inserimento nell'insertdb.java ha avuto successo.
Il prompt dei comandi di sinistra esegue l'insertdb dopo la creazione della tabella users2, la tabella aggiornata èvisualizzata sul prompt dei comandi destro come output per la query select * da users2.
Per garantire che non si possa inserire lo stesso username si utilizza un vincolo univoco, proprio come le chiavi primariesono necessarie per essere uniche, possiamo anche garantire che il nome utente sia univoco.
Ora se cerchiamo di inserire la stessa riga, c'è un'eccezione che è che il duplicatochiave f1 è inserito per uname e questa volta il codice di stato cambia a 23.000 e il codice mariadbè 1062. 23000 è il codice di errore standard per ER_DUP_ENTRY.
Il modo consueto di correggere gli errori è quello di cercare il codice di stato (qui, ER_DUP_ENTRY chesignifica che è stata effettuata una voce duplicata).
TIP:Quando usiamo i siti web, quasi tutti richiedono agli utenti di registrarsi e identificarsidal nome, città, ecc. non è necessariamente unico o può anche essere il caso che qualcuno possafacilmente impersonare sapendo i tuoi dettagli. Così invece creiamo una nuova identità o si utilizzaun'identità già nota per essere unica come l'indirizzo email di Yahoo dove alcuniterzi come Yahoo o Google si sono presi cura che gli id email sono unici per raggiungere finalmenteuna nozione stabile di identità utente per la tua app.
Nel codice precedente abbiamo creato una tabella senza vincolo univoco e poi aggiunta daalterandola. L'alternativa è quella di utilizzare questa dichiarazione univretta proprio nello schema della tabella comemostrata di seguito.
Così ad esempio se si desidera vedere come questa unicità è raggiunta utilizza gli indici di visualizzazione dausers2;
La pagina del registro del sito web deve avere la funzionalità di visualizzazione degli errori. Noi invececreiamo una nuova schermata con un url diverso per la visualizzazione delle query che portano ad un errore.
Il posto giusto per restituire un errore come questo è una questione di design UI.
Nella pagina di registro stessa abbiamo il campo di input che corrisponde al campo di input mostratoqui, ma nella pagina di errore del registro aggiungiamo un'altra riga (evidenziata nella figura di cui sopra)oltre al campo di input.
Un designer potrebbe preferire il messaggio di errore da centrare o allineato al lato sinistro diil campo di input. Tutti questi effetti possono essere raggiunti, ma è brutto da realizzare solo con i tavoli.CSS è migliore ma ha bisogno di molte più conoscenze di CSS rispetto a quanto abbiamo imparato.
La pagina di errore con uno stile extra chiamato schema: 1px blu solido. Questo è fatto per mostrare
come la prima riga ha una tabella con 2 righe, quindi c'è una tabella all'interno di una tabella.
Come sappiamo la parte primaria della struttura è una riga di pulsanti, una riga con il campo di input,ma poi questo campo di input a sua volta consiste in una tabella che contiene il campo di inpute la seconda riga ha il testo del messaggio di errore. Farlo e sizzarli può essere noioso.
CSS rende molto più facile creare applicazioni che funzionano per mobiles, tablet così comenormali siti web.
L'interfaccia utente viene influenzata in base all'input al campo di input. L'interfaccia utente diventapiù dinamica visto che l'app deve rilevare la presenza o l'assenza di errori e output differentihtml files.Vogliamo vedere la seguente emissione quando un utente già creato abc2 è nuovamente registrato:
Aggiungiamo due cose al file FairShareDb.java:
● La parte di aggiornamento viene effettuata in una funzione chiamata registerUser (req, out) cheprende la richiesta e l'output. Questo output è il PrintWriter che otteniamo dall'oggetto di risposta.● Ottieni tutti gli utenti registrati nella parte della query e questo è incluso nel modello come abbiamo visto prima.
La data / ora unix viene valutata sul lato server, questa è una funzione SQL:unix_timestamp (). howmany field memorizza il numero di righe interessate dalla query di registro eseguita in precedenza.
Quando c'è un'eccezione, lo stato SQL viene controllato per la voce duplicata utilizzandosqlState.equals (SQLSTATEDUP). Imposteremo l'attributo nella richiesta chedice “ yes ”, c'è un utente duplicato e stiamo anche andando a inviare il username che ètentato di essere duplicato, in modo che il messaggio di errore possa contenere ciò che l'utente esattamenteduplicato.
Se il codice di stato SQL è altro, stiamo semplicemente scaricando l'eccezione SQL epoi chiudiamo l'istruzione. Ci faremo intervenire con i tipi di errore voce duplicati.
Eseguire la query e il risultato è un elenco di mappe, impostare l'attributo dei dati utente e andare alla funzioneregister.jsp. Una novità qui è che questo template fa 2 cose diverse in base ase ci fosse un utente duplicato o meno. Come abbiamo visto, l'obiettivo è quello di aggiungere una riga contenente il messaggio di erroresolo se c'è un utente duplicato e se c'è un tale utente, allora si devecitare ciò che è questo.
Si potrebbe aver notato che l'errore è stato stampato in rosso testo colorato utilizzando la classe CSS:tdError.
tdError class: Color dovrebbe essere rosso, lo stile dei font è corsivo, la dimensione del carattere è più grande cioè semplicemente più grande difont predefinito, allineato al centro. Le suddette due classi CSS sono state utilizzate per ottenere il layout della tabelladall'ultima volta.
Validazione inizia a diventare molto importante quando si fanno le updazioni. Per dimostrare, clicca suregistro utente senza input inserito nel campo di input. Dal momento che username! =null è presente nel codice, se non c'è username, c'è una nuova riga nella tabella con un nome in bianco anche se il comportamento attesocome utente finale del sito web potrebbe essere quello di non aggiungere alcuna riga alla tabella.
C'è molto di più per la validazione dell'utente rispetto all'esempio semplice. Per dimostrarlo, noi primifacciamo una modifica per rifiutare la stringa vuota se l'username è vuoto.
Bisogna garantire nulla fallisce quando la tabella è vuota, ma il nostro sito visualizza un errore.
La verifica di un database dovrebbe essere automatizzata ma è una caratteristica caratteristica dello sviluppo webmoderno dove la maggior parte di esse viene testata in qualche versione.
Nel nostro caso potremmo usare il tomcat incorporato ma ci sono molti modi per automatizzare. Una voltache cambia, inserendo e controllando i dettagli inizia a diventare la caratteristica della tua applicazione,la vita diventa notevolmente più difficile. Anche aggiunta di un singolo preventivo (&ldè) all'input lancia un'eccezioneche la nostra app non può gestire, scarica solo la traccia di stack. Quindi solo un brutto input è
difficile da gestire.
Noi usiamo il concetto di istruzioni preparate per ottenere migliori test. In certecircostanze possono essere più efficienti anche se usati in loop. Specificail database che parte dell'istruzione viene specificato da developer e quale parte sta arrivandocome input dagli utenti, in modo che il database lo tratterà non come qualcosa che la cui sintassiil database deve comprendere, pulirà l'input dell'utente isolando e poi lo memorizzerà separatamentesenza lasciarsi influenzare il resto dell'istruzione.
Nel nostro esempio nulla è irrimediabilmente rotto, solo la richiesta viene compromessa. Così possiamoricaricare la pagina per cancellare l'esecuzione precedente.
Invece di creare solo un comunicato, stiamo per creare un'istruzione preparata dove allo stesso posto viene fornito anche lo stesso posto della query. L'istruzione preparata contatterà il database,compila l'istruzione preparata, questo è un altro motivo a causa della pre - compilazione cheistruzioni preparate possono essere più efficienti e nella dichiarazione preparata lasceremoun buco, un parametro in cui il valore utente sarà collegato. Il modo consueto di farlo è aavere un? dire che è qui che ci colleteremo di un valore. Il resto rimane lo stesso diprima.
Così si ottiene l'userName come prima, completa la tua validazione, e poi dici upd.setString (1, username); e poiché la query è già nota tutto ciò che devi fareè eseguire l'aggiornamento come mostrato sopra.L'idea è che non si specifica un input cattivo, si specifica solo quale sia un valido input,Così anche se il database, l'SQL standard potrebbe non approvare quando scritto in una stringasintassi,
Si può usare la stessa idea per esempio per le spese. A questo punto avremo in realtàquasi un'app di database completa in cui l'unica cosa che è diversa è che gli utenti diversinon possono accedere al sistema contemporaneamente solo.
Così a questo punto abbiamo un'app ragionevolmente completa.
Non abbiamo però le operazioni di cancellazione come la rimozione di un utente ma non è diverso daquello che abbiamo fatto finora. Così come abbiamo fatto registrare, creare un altro pulsante chiamato unregisterche rende il sistema elimina la riga dal database con il nome utente fornito.
Una volta aggiungete login e cookie, la nostra app sarà essenzialmente completa e avrete vistotutti i pezzi inclusi vari scenari di debug che si presentano quando un'app web deve esseresviluppata.