Corso di Ingegneria del Web A A Corso di Ingegneria del Web A A. 2017-2018 Domenico Rosaci WS e Java Beans Esercitazione N°3
Riprendiamo il WS dell’esercitazione num Riprendiamo il WS dell’esercitazione num. 1, per il quale avevamo inserito il client provaClient() D. Rosaci Ingegneria del Web
Aggiungiamo al progetto una pagina JSP D. Rosaci WS e JSP
Salvare la jsp in WebContent D. Rosaci WS e JSP
Applichiamo il template standard D. Rosaci WS e JSP
Completare la JSP D. Rosaci WS e JSP
Eseguire la JSP D. Rosaci WS e JSP
Considerazioni Di fatto abbiamo collegato il WS ad un client java per poi inserire questo client in una JSP Il web service resta comunque disponibile per essere usato da altri client, anche non basati su java D. Rosaci WS e JSP
Java Beans Le JSP sono estensioni dei servlet Java, di conseguenza consentono di ottenere tutti i risultati di questi ultimi. Lo svantaggio dei Servlet è però rappresentato dalla difficoltà di manutenzione del codice HTML delle applicazioni eccessivamente complesse, in quanto il più delle volte contengono una quantità di codice scriptless eccessiva per un programmatore non esperto in Java. Soluzione a questo problema è rappresentata dai Java Beans, componenti software contenenti una classe Java, che possono venire inclusi in una pagina JSP, permettendo quindi un ottimo incapsulamento del codice, peraltro riutilizzabile. Al Web Designer quindi sarà pressochè invisibile la sezione di codice puro, sostituito da richiami ai metodi delle classi incluse. I Bean sono costituiti esclusivamente da codice Jav, salvati con estensione .java e compilati generando un file di estensione .class. Sarà il file .class che dovrà venire incluse nella pagina JSP. D. Rosaci WS e JSP
jsp:useBean Es. <jsp:useBean id=”nomeBean” scope=”session” class=”classe” /> Permette di associare un’istanza di un JavaBean (associata ad un determinato ID) ad una variabile. In pratica offre la possibilità di associare la classe contenuta nel JavaBean ad un oggetto visibile all’interno della pagina, in modo da poter richiamare i suoi metodi. Attributi: Id: identità dell’istanza dell’oggetto nell’ambito specificato. Scope: ambito dell’oggetto, le opzioni sono: page: gli oggetti con questo ambito sono accessibili solo all’interno della pagina in cui sono stati creati, in pratica possono venire paragonati alle variabili locali di un qualsiasi linguaggio di programmazione, vengono distrutte alla chiusura della pagina e i dati saranno persi; request: gli oggetti con questo ambito sono accessibili esclusivamente nelle pagine che elaborano la stessa richiesta di quella in cui è stato creato l’oggetto, quest’ultimo inoltre rimane nell’ambito anche se la richiesta viene inoltrata ad un’altra risorsa; session: gli oggetti in quest’ambito sono accessibili solo alle pagine che elaborano richieste all’interno della stessa sessione di quella in cui l’oggetto è stato creato per poi venire rilasciati alla chiusura della sessione a cui si riferiscono, in pratica restano visibili in tutte le pagine aperte nella stessa istanza (finestra) del Browser, fino alla sua chiusura. Solitamente i bean istanziati in questo modo vengono utilizzati per mantere le informazioni di un utente di un sito; application: gli oggetti definiti in quest’ambito sono accessibili alle pagine che elaborano richieste relative alla stessa applicazione, in pratica sono validi dalla prima richieta di una pagina al server fino al suo shotdown. class: nome della classe che definisce l’implementazione dell’oggetto nomeBean D. Rosaci WS e JSP
jsp:setProperty Permette di impostare il valore di una delle proprietà di un bean. Attributi: name: nome dell’istanza di bean definita in un’azione <jsp:useBean> property: rappresenta la proprietà di cui impostare il valore value: valore assegnato alla proprietà specificata Esempio: <jsp:setProperty name=”nome_bean” property=”prop” value=”v” /> permette di assegnare il valore v alla proprietà prop del bean di nome nome_bean. D. Rosaci WS e JSP
Jsp:getProperty Prende il valore di una proprietà di una data istanza di bean e lo inserisce nell’oggetto out implicito (in pratica lo stampa a video). Attributi: name: nome dell’istanza di bean da cui proviene la proprietà definita da un’azione <jsp:useBean> property: rappresenta la proprietà del bean di cui si vuole ottenere il valore D. Rosaci WS e JSP
Esempio: InfoUtente public class InfoUtente { private String nome = null; private String email = null; private int pagineViste; public InfoUtente() { pagineViste=0; } public aggiornaPV() { pagineViste++; } public int getPagineViste(){ return pagineViste; } public void setNome(String value) { nome = value; } public String getNome() { return nome; } public void setEmail(String value) { email = value; } public String getEmail() { return email; } public String riassunto(){ String riassunto = null; riassunto = "Il nome dell'utente è"+nome+","; riassunto+= "il suo indirizzo e-mail è: "+email; riassunto+= " e ha visitato "+pagineViste+" del sito"; return riassunto; } }//InfoUtente D. Rosaci WS e JSP
Uso del Java Bean nella JSP <html> <head><title>Utilizzo del Bean</title></head> <body> <jsp:useBean id="utente" scope="session" class="InfoUtente"/> <jsp:setProperty name="utente" property="nome" value=“Mario"/> in alternativa usare i metodi pubblici della classe: <% utente.setNome(«mario"); utente.setEmail(«mario@email.it"); %> La lettura dei valori si può fare così: <jsp:getProperty name="utente" property="nome"/> Oppure così: <% out.println(utente.getNome()); out.println(utente.riassunto()); %> D. Rosaci WS e JSP
Altro Es. RubricaStudenti package it.domenicorosaci; class Info{ private String nome; private String cognome; private String email; private String telefono; public String getNome() { return nome; } public String getCognome() {return cognome;} public String getEmail() {return email;} public String getTelefono() {return telefono;} public void setNome(String n) {nome=n;} public void setCognome(String c) {cognome=c;} public void setEmail(String e) {email=e;} public void setTelefono(String t) {telefono=t;} (Aggiungere come nuova classe in file separato nel progetto RubricaStudenti dell’esercitazione WS 2) D. Rosaci WS e JSP
AGGIUNGERE ALLA CLASSE RubricaStudenti public ArrayList<Info> trovaInfo(String matricola) { ArrayList<Info> risultato=new ArrayList<Info>(); Info tmp; try {new com.mysql.jdbc.Driver(); Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/studenti"; Connection con = DriverManager.getConnection(url, "root", "poirot75db"); Statement cmd = con.createStatement(); String query = "SELECT studenti.Nome,studenti.Cognome,recapiti.telefono,recapiti.email FROM recapiti INNER JOIN studenti ON studenti.matricola=recapiti.matricola WHERE matricola="+matricola; ResultSet res = cmd.executeQuery(query); while(res.next()){tmp=new Info(); tmp.setNome(res.getString("Nome")); tmp.setCognome(res.getString("Cognome")); tmp.setTelefono(res.getString("telefono")); tmp.setEmail(res.getString("email")); risultato.add(tmp); } res.close(); cmd.close(); con.close(); catch (Exception e) { System.out.println("errore di connessione: "+e); e.printStackTrace(); return risultato;} D. Rosaci WS e JSP
Scrivere la pagina JSP <%@page import="it.domenicorosaci.RubricaStudenti"%> <%@page import="it.domenicorosaci.Info"%> <%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Rubrica Studenti</title> </head> <body> (CONTINUA) D. Rosaci WS e JSP
<% String m=request.getParameter("matricola"); if((m==null)||(m.length()==0)){%> <form action="" > <br>Matricola:<input type= "text" name="matricola"> <br><input type= "submit"> </form> <%}else{ ArrayList<Info> res = RubricaStudenti.trovaInfo(m); if(res!=null) {%> lo studente avente matricola <%=m%> si chiama <%=res.get(0).getNome()%> <%=res.get(0).getCognome()%> <br> recapiti: <%for(int i=0;i<res.size();i++){%> <br>num: <%=i+1%>: <%if(res.get(i).getTelefono()!=null)%> telefono: <%=res.get(i).getTelefono()%> <%if(res.get(i).getEmail()!=null)%> email: <%=res.get(i).getEmail()%> <%} } else%> non esiste uno studente con tale matricola <%}%> </body> </html> D. Rosaci WS e JSP
Considerazioni Stavolta non abbiamo usato alcun WS L’approccio con il Java Beans si è posto come alternativa al WS E’ un approccio che non si presta ad essere usato con altre tecnologie D. Rosaci WS e JSP