Laboratorio di sistemi Prima Web Application JSP [Java] Vogliamo scrivere la nostra prima web application che legga da tastiera il nostro nome e fornisca un messaggio di saluto. Per costruire la nostra applicazione creiamo con NetBeans un nuovo progetto. File > New Project... > Web > Web Application. Diamo un nome (PrimaWebApp). Confermiamo tutte le impostazioni predefinite. Facciamo solo attenzione all'impostazione del Server: scegliamo Tomcat 5.5. Modalità 1) Usiamo un form e una servlet (creiamo quindi due file: tasto destro del mouse sul nome del progetto > New > HTML... (form.htm); poi New > Servlet... (Saluto.java). Per eseguire l'applicazione, tasto destro del mouse sul nome del file html > Run File. In tal modo, viene attivato Tomcat. File form.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h3>Form di prova</h3> <!-- aggiungere al codice HTML il seguente codice: --> <form action="Saluto" name="provaFrm" method="post" > <input type="text" name="nomeTxt" value="" /> <input type="submit" value="Invia" name="inviaBtn" /> </form> </body> </html> Servlet Saluto.java package provaPkg; import import import import java.io.*; java.net.*; javax.servlet.*; javax.servlet.http.*; /** * @author maurizio */ public class Saluto extends HttpServlet { // qui possono esser presenti delle variabili attributo; ad ogni modo, per motivi // che sarebbe troppo lungo spiegare in questa sede, le variabili attributo non si // dovrebbero utilizzare nelle servlet int i; public void init(ServletConfig config) { // per esempio inizializziamo la variabile i i = 10; } primawebapp.pdf Pag. 1/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // nel form usiamo il metodo POST doPost(request,response); } // metodo richiamato da doGet e da doPost protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { //TODO output your page here out.println("<html>"); out.println("<head>"); out.println("<title>Servlet Saluto</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>Servlet Saluto all'indirizzo (relativo) " + request.getContextPath () + "</h3>"); String nome = request.getParameter("nomeTxt"); if (nome.equals("")) nome="Maurizio"; out.println("Ciao "+nome+". Benvenuto alla tua prima web application.<br/>"); out.println("Questo codice è generato da una Servlet."); out.println("<br/>Il valore della variabile i="+i); out.println("</body>"); out.println("</html>"); } } finally { out.close(); } // metodo richiamato quando si richiede un "get" protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } // metodo richiamato quando si richiede un "post" protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } primawebapp.pdf Pag. 2/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] // breve descrizione della servlet public String getServletInfo() { return "Prima Web Application di prova"; } public void destroy() { // per esempio cambiamo il valore di i i = 4; } } // fine servlet Saluto Modalità 2) Usiamo una sola pagina jsp (la pagina conterrà sia il codice HTML che il codice jsp). Modifichiamo il codice della pagina index.jsp (che esiste già) nella maniera seguente. Per eseguire l'applicazione, tasto destro del mouse sul file index.jsp > Run File (verrà eseguita anche la compilazione, qualora non sia già stata effettuata). Pagina index.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <!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=UTF-8"> primawebapp.pdf Pag. 3/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] <title>JSP Page</title> </head> <body> <h3>La tua prima web application</h3> <% // Se è stato premuto il tasto submit if (request.getParameter("inviaBtn")!=null) { String nome = request.getParameter("nomeTxt"); // se l'utente ha scritto il suo nome if (!nome.equals("")) { out.println("Ciao "+nome+". Benvenuto alla tua prima web application."); out.println("Questo codice è generato da una pagina jsp.<br/><br/>"); } } %> <form action="${request.requestURI}" name="provaFrm"> Scrivi il tuo nome <input type="text" name="nomeTxt" value="" /> <input type="submit" name="inviaBtn" value="Invia"/> </form> </body> </html> requestURI è un metodo dell'oggetto predefinito (o implicito) request (che denota la richiesta effettuata al server) che restituisce il nome della pagina web corrente. getParameter(“nomeTxt”) è il metodo dell'oggetto request che restituisce il contenuto della casella testuale nomeTxt. primawebapp.pdf Pag. 4/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] Il metodo prescelto questa volta è il “get” (se nel form non scriviamo il metodo in maniera esplicita, il sistema assume “get”). Modalità 3) Un'unica pagina jsp che fa uso delle librerie JSTL (Jsp Standard Tag Library). Ricordiamoci di includere nel nostro progetto tali librerie (Tasto destro del mouse sul progetto > Proprietà > Libraries > Add Library > JSTL 1.1). Creiamo adesso una nuova pagina jsp: tasto destro del mouse sul nome del progetto > New > JSP...(index2.jsp). Pagina index2.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!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=UTF-8"> <title>JSP Page</title> </head> <body> <h3>Prima web application!</h3> <form action="${request.requestURI}" name="provaFrm"> Scrivi il tuo nome <input type="text" name="nomeTxt" value="" /> <input type="submit" name="inviaBtn" value="Invia"/> </form> <c:if test="${!empty param.inviaBtn}"> <c:set var="nome" value="${param.nomeTxt}"/> <c:if test="${!empty nome}"> <br/>Benvenuto <c:out value="${param.nomeTxt}"/>. Questo codice è generato da una pagina jsp. </c:if> </c:if> </body> </html> param è un oggetto predefinito e contiene tutti i parametri del form. primawebapp.pdf Pag. 5/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] Modalità 4) Usiamo una pagina web (index3.jsp) e una classe java (javabean). Maggiori approfondimenti sul concetto di javabean saranno affrontati in seguito. Ricordiamoci di includere le librerie JSTL, come illustrato nella modalità 3. Tasto destro del mouse sul nome del progetto > New > Java Class...(MessaggioBean.java) File MessaggioBean.java /** * * MessaggioBean.java */ package provaPkg; /** * * @author maurizio */ public class MessaggioBean implements java.io.Serializable { private String saluto; private String nome; public MessaggioBean() { saluto="Ciao"; nome="Maurizio"; } primawebapp.pdf Pag. 6/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] public MessaggioBean(String saluto, String nome) { this.saluto=saluto; this.nome=nome; } public String getSaluto() { return saluto; } public void setSaluto(String saluto) { this.saluto=saluto; } public String getNome() { return nome; } public void setNome(String nome) { this.nome=nome; } } // fine JavaBean File index3.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!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=UTF-8"> <title>JSP Page</title> </head> <body> <h3>Uso di una classe (javabean)</h3> <jsp:useBean id="messaggio" class="provaPkg.MessaggioBean"/> <form action="${request.requestURI}" name="provaFrm"> Scrivi il tuo nome <input type="text" name="nome" value="" /> <input type="submit" name="inviaBtn" value="Invia"/> </form> <c:if test="${!empty param.inviaBtn}"> <jsp:setProperty name="messaggio" property="*"/> <jsp:setProperty name="messaggio" property="saluto" value="Benvenuto"/> <br/><jsp:getProperty name="messaggio" property="saluto"/> primawebapp.pdf Pag. 7/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] <jsp:getProperty name="messaggio" property="nome"/>. Questo codice fa uso di un javabean. </c:if> </body> </html> L'asterisco che appare precedentemente ci consente di associare tutti i campi del form agli attribuiti della classe (noi tuttavia utilizziamo un solo attribuito) per cui il nome del parametro del form deve essere nome e non nomeTxt. Se non viene inserito nessun valore, il sistema assume come nome Maurizio. Se viene fornito un nome, appare il messaggio di benvenuto per quel nome. Il messaggio di saluto è “settato” a “Benvenuto”. Se non si “setta” il messaggio di saluto, appare “Ciao”. Modalità 5) Sempre nell'ipotesi di voler utilizzare la classe (javabean) MessaggioBean, creiamo il file index4.jsp con la procedura indicata precedentemente File index4.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> primawebapp.pdf Pag. 8/9 Cozzetto © Laboratorio di sistemi Prima Web Application JSP [Java] <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h3>Uso di una classe (javabean)</h3> <form action="${request.requestURI}" name="provaFrm"> Scrivi il tuo nome <input type="text" name="nomeTxt" value="" /> <input type="submit" name="inviaBtn" value="Invia"/> </form> <% // istanziamo l'oggetto messaggio provaPkg.MessaggioBean messaggio = new provaPkg.MessaggioBean(); // Se è stato premuto il tasto submit if (request.getParameter("inviaBtn")!=null) { messaggio.setSaluto("Benvenuto"); String nome = request.getParameter("nomeTxt"); if (nome.equals("") || nome==null) { nome = messaggio.getNome(); } String saluto = messaggio.getSaluto(); out.println("<br/>"+saluto+" "+nome+". Benvenuto alla tua prima web application."); out.println("Questo codice è generato da una pagina jsp.<br/><br/>"); } %> </body> </html> L'output è comunque simile a quello della modalità 4. primawebapp.pdf Pag. 9/9 Cozzetto ©