Laboration 3, dt087g Programmering i Java Enterprise Laboration 3, webb Servlets och databaser Översikt Du ska i laborationen ge en redogörelse för hur man skapar en webbsida som kan interagera med en databas. Källkoden som vi använder från boken[1] används med fördel i labben. Uppgifter 1) Skapa ett webbprojekt ”Maven Webb Application” 2) Kör index.jsp. Välj applikationsserver Glassfish 3. Om du inte ser någon glassfish server i listan måste du konfigurera NetBeans för din glasfiskinstallation under Tools/Servers. 3) Vad blir resultatet? Vad heter filen som innehåller din nybyggda webbapplikation? 4) Skapa en Servlet. Högerklicka projektet → New → Servlet. Döpt den till BookLook eller något liknande. Välj ett lämpligt paket eller paketnamn för din servlet. Notera att du här kan ange den URL som Servleten ska svara på. 5) Avkommentera System.out.println-satserna processRequest metoden. Välj Build och Run File på din servlet. Vad blir resultatet? 6) Vilka metoder innehåller Servlet-klassen? Vad är de till för? 7) Ange chapter02 som dependency under Libraries. Du bör nu även få med chapter02s dependencies. Vi behöver i synnerhet klassen Book ur listning 2 -3, eller som den ges i listning 6-3. 8) Skapa en Persistence Unit, högerklicka projekt Välj New → Persistence unit. Välj namnet ”Lab3PU”, konfigurera din datakälla så att den hänvisar till samma databas som i Labb 2. Din miljö bör likna Laboration 3, dt087g Programmering i Java Enterprise 9) Skapa en EntityManager som i lab 2 och läs in alla poster från bookstabellen med den Named Query som Book.java har ”findAllBooks”. Lägg till på lämplig plats i processRequest EntityManagerFactory emf = Persistence.createEntityManagerFactory("Lab3PU"); EntityManager em = emf.createEntityManager(); Query q = em.createNamedQuery("findAllBooks"); List<Book> list = q.getResultList(); for(Book b:list){ out.println("<p>"+b.getTitle()+", "+b.getDescription()+"</p>"); } out.println("<p>"+list.size()+"</p>"); em.close(); emf.close(); Kör BookLook. Vad blir resultatet? 10) Ändra index.jsp så att den innehåller ett formulär som tar emot data för en bok. Låt formulärets action-attribut hänvisa till din servlet. Sätt method till ”post”. Lägg till fält för Title, Description, Price, NbOfPage och ISBN. Ta naturligtvis också med en Submit-knapp. Kontrollera att submit-knappen navigerar dig till din Servlet. Vad händer? 11) Förändra koden i doPut så att du kan lägga till formulärdatat med hjälp av din PU och koden från Lab 2. Book book = new Book(); book.setTitle("The Hitchhiker's Guide to the Galaxy"); Laboration 3, dt087g Programmering i Java Enterprise book.setPrice(12.5F); book.setDescription("Science fiction comedy series created by Douglas Adams."); book.setIsbn("1-84023-742-2"); book.setNbOfPage(354); book.setIllustrations(false); EntityManagerFactory emf = Persistence.createEntityManagerFactory("Lab3PU"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); em.persist(book); tx.commit(); em.close(); emf.close(); I stället för givna strängar kommer du åt det skickade formulärdatat med hjälp av request.getParameter(”name-i-html-formuläret”); Använd dessa som indata till Bookmetoderna. Du kommer väl ihåg hur du konverterar String till numeriska värden? Anropa sedan processRequest. 12) Beskriv resultatet och hur din applikation fungerar. Finner du något med lösningen som är olämpligt? Ledning och tips I 3 och 5) kan du tänkas vara tvungen att ange vilken webbläsare som är din standardwebbläsare i netbeans. Navigera till din webbläsare och välj den körbara filen. Om du får problem med din Persistence Unit, kontrollera följande: – Namnet på PUn måste stämma överens med Entity Managerns referens. Som alltid då flera saker beror på varandra kan vissa mer oväntade handgrepp ge goda resultat. Jag har haft viss men inte obetydlig framgång med att ändra persistence.xml-filen (utan att göra ändringar) därefter byggt om projektet och det har därefter fungerat. Databasen kan krångla om man kör flera instanser av nätverksservern. Då kan en omstart med stopNetworkServer / startNetworkServer och eller NetBeans göra susen. Då du stöter på problem noterar du detta och dess lösning i rapporten. Du behöver inte ta upp problem om du betraktar lösningen som överjordisk eller omöjlig att definiera. Var noggrann med dina hänvisningar och referenser i rapporten. Se rapportmallen[2] hur dessa bör utformas. Du bör bokföra all litteratur och alla webbsidor du använder då du sammanställer rapporten, förslagsvis genom din webbläsares bokmärkesfunktioner. Du bör inte följa mallens disposition utan skriv rapporten så att du har ett avsnitt per punkt i frågeställningarna och avsluta med källförteckning. Var koncis och tydlig! Källförteckning [1] Antonio Goncalves, ”Beginning Java EE Platform with Glassfish 3”, apress. 2010. Laboration 3, dt087g Programmering i Java Enterprise Kapitel 2 till 4. [2] ITM Mittuniversitetet, ”Anvisningar och mall” http://www.miun.se/PageFiles/8362/MallTekniskaRapporterMIUN.doc . Se avsnitt källförteckning. [3] Java Servlets , http://en.wikipedia.org/wiki/Java_Servlet 2011-01.