Capitolo 7 Esercizio 7.1 Commentare le caratteristiche di HTTP come protocollo client-server, evidenziando gli aspetti differenti rispetto ai protocolli client-server tradizionali. La caratteristica che differenzia particolarmente HTTP rispetto ad altri protocolli è il suo essere stateless. E' si possibile inviare informazioni tramite le sue primitive, ma non è possibile tenerne traccia. Questa caratteristica lo rende particolarmente inadatto per le operazioni normalmente attuate dai web services. Esercizio 7.2 Scrivere un form html che permetta all'utente di inviare il proprio nome e cognome a un programma CGI che stampa una pagina HTML di saluto, contenente il nome e il cognome dell'utente e l'ora di sistema. <P align= center > Form di invio nome e cognome </P> <FORM action= nomecognome.exe method= post > </FORM> nome: cognome: <INPUT type= text name= nome > <BR> <INPUT type= text name= cognome > <BR> <INPUT type= submit value= invia > //Programma nomecognome.exe #include <stdio.h> void main() { char* QUERY_STRING; int i=0; //legge le variabili inviate al programma strcpy( QUERY_STRING, getenv( QUERY_STRING );); cout( Content-type text/html\n\n ); cout( <HTML>\n<BODY>\n ); cout( BENVENUTO,QUERY_STRING \n ); cout( Ora di sistema:,getorasistema(), \n ); cout( </BODY>\n</HTML>\n ); return 0; }
Esercizio 7.3 Riscrivere il programma dell'esercizio precedente come servlet e come template JSP. SERVLET: import java.io.*; import=java.util.* ; import java.servlet.*; import java.servlet.http.*; public class nomecognome extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { string nome = request.getparameter( nome ); string cognome = request.getparameter( cognome ); Date data = new Date(); response.setcontenttype( text\html ); PrintWriter out = response.getwriter(); out.println( <HTML> ); out.println( <HEAD> ); out.println( <TITLE>Pagina di Benvenuto</TITLE> ); out.println( </HEAD> ); out.println( <BODY> ); out.println( Benvenuto + nome + + cognome); out.println( Ora di sistema + data); out.println( </BODY> ); out.println( </HTML> ); }} TEMPLATE: @page language= java page import= java.util.* Date data= new Date; String nome = request.getparameter( nome ); String cognome = request.getparameter( cognome ); <HTML> <HEAD> <TITLE>Pagina di Benvenuto</TITLE> </HEAD> <BODY> Benvenuto = nome = cognome Ora di sistema = data </BODY> </HTML>
Esercizio 7.4 Dato lo schema concettuale della base di dati contenente autori e libri utilizzato nei paragrafi 4.2.1, 4.2.2 e 4.2.3, scrivere un template JSP contenente una form di ricerca che permette di inserire il cognome di un autore. Scrivere un secondo template che, ricevuto il cognome di un autore, stampa la lista dei libri da lui scritti. FORM 1: <P align= center > Form di inserimento cognome autore </P> <FORM action= form2 method= post > cognome: <INPUT type= text name= cognome > <BR> <INPUT type= submit value= invia > </FORM> FORM 2: @page language= java page import= java.io.* page import= java.util.* page import= java.sql.* string cognome = request.getparameter( cognome ); Class.forName( sun.jdbc.odbc.jdbcobdcdriver ); Connection conn = DriverManager.getConnection ( jdbc:odbc:db, Utente, psw ); PreparedStatement sqlcode = conn.preparestatement( Selec ISBN, Titolo, Editore, Prezzo from (AUTORE join SCRIVE on autore.codice=scrive.codice) join LIBRO where Cognome =? sqlcode.setstring(1, cognome); ResultSet result = sqlcode.executequery(); <HTML> <HEAD> <TITLE>Elenco dei Libri dell'autore selezionato</title> </HEAD> <BODY> while (result.next()) { <P> ISBN: = result.getstring( ISBN ) Titolo: = result.getstring( Titolo ) Editore: = result.getstring( Editore ) Prezzo: = result.getstring( Prezzo ) </P> } </BODY> </HTML> result.close(); sqlcode.close(); conn.close();
Esercizio 7.5 Si vuole costruire un sito Web per la società di formazione discussa negli esempi dei capitoli 7 e 8 del primo volume di questo libro. Allo scopo: 1. specificare i requisiti per il sito, individuando le informazioni di interesse per il pubblico esterno dell'azienda; 2. progettare lo schema concettuale dell'ipertesto. 1.Le informazioni di interesse sono i corsi, gli orari delle lezioni, i docenti e, nel caso siano contemplate, le abilitazioni connesse al corso. 2. Esercizio 7.6 Si vuole costruire un sito Web per la gestione di una bacheca di messaggi. Allo scopo: 1. specificare i requisiti per il sito, individuando le informazioni di interesse per gli utenti; 2. progettare lo schema concettuale della base di dati e dell'ipertesto; 3. realizzare la base di dati e le pagine dell'ipertesto. In particolare, si utilizzino JSP per le pagine dinamiche di pubblicazione dei contenuti e Java servlet per l'operazione di creazione di un messaggio nella bacheca.
1. Le informazioni di interesse sono: l'autore del messaggio e alcune informazioni sulla sua identità (e-mail, nome o nickname), la data del messaggio e, naturalmente, il corpo del messaggio. 2. 3. BASE DI DATI: Create table Utente ( nome char(20) primary key, email chat(20) ) Create table Messaggio ( codice int primary key, data date, corpo clob, utente char(20) references Utente(nome) )
PAGINE DELL'IPERTESTO: @page language= java page import= java.io.* page import= java.sql.* Class.forName( sun.jdbc.odbc.jdbcobdcdriver ); Connection conn = DriverManager.getConnection ( jdbc:odbc:db, Utente, psw ); PreparedStatement sqlcode = conn.preparestatement( Select utente, email, codice, data, corpo from (UTENTE join MESSAGGIO on utente.nome=messaggio.utente) order by data ResultSet result = sqlcode.executequery(); <HTML> <HEAD> <TITLE>Elenco messaggi</title> </HEAD> <BODY> while (result.next()) { <P> Utente: = result.getstring( utente ) E-mail utente: = result.getstring( email ) Data Invio: = result.getstring( data ) Corpo del messaggio: = result.getstring( corpo ) </P> } </BODY> </HTML> result.close(); sqlcode.close(); conn.close();
SERVLET PER CREAZIONE MESSAGGI: import java.io.*; import=java.sql.*; import=java.util.*; import java.servlet.*; import java.servlet.http.*; public class nomecognome extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { string nome = request.getparameter( nome ); string email = request.getparameter( email ); string corpo = request.getparameter( corpo ); Date data = new Date(); Codice codice = new Codice(); Connection conn = DriverManager.getConnection ( jdbc:odbc:db, Utente, psw ); PreparedStatement sqlcode = conn.preparestatement( insert into UTENTE(nome,email) values(' + nome + ',' + email + ') insert into MESSAGGIO(codice,data,corpo,utente) values(' + codice + ',' + data + ',' + corpo + ',' + nome + ') sqlcode.executequery(); sqlcode.close(); conn.close(); }}