Laboration 3, webb Servlets och databaser

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.