1 / 15

Servlets — Java på serversidan

Servlets — Java på serversidan. Introduktion. Javaservlets är en i raden av SUN:s många tillämpningar avJava. Servlets kan grovt sägas vara applets på serversidan.

ganit
Download Presentation

Servlets — Java på serversidan

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Servlets — Java på serversidan

  2. Introduktion • Javaservlets är en i raden av SUN:s många tillämpningar avJava. Servlets kan grovt sägas vara applets på serversidan. • Funktionsmässigt liknar de också i mycket CGI-program. Servlets kan dessutom också ges mindre begränsade rättigheter än applets och fungerar mer som javaapplika-tioner. • Visserligen har det tidigare varit möjligt att skriva CGI-program i Java, men med servlets kommer också ett särsilda klasser som gör det lättare att skriva applikationer på serversidan – ett API för servlets.

  3. Servlets — generell modell

  4. CGI och servlets • CGI-program och servlets har mycket gemensamt och det råder en ständig debatt kring om det verkligen är någon skillnad mellan CGI-program och servlets. Servlet-förespråkarna har ofta talat om att servelets bara behöver laddas en gång i primärminnet och köras som en process. • CGI-anhängarna har då påpekat att de flesta större webbservrarna på marknaden idag erbjuder någon typ av API med likvärdig funktionalitet. CGI-anhängarna har också menat att tradionell server-programmering med kompilerande språk som t ex C eller C++ resulterar i snabbare program och att dessa språk fungerar bätre för industriella ändamål. • Java har knappast endast fördelar. Java i dess olika former har inte varit så värst kompatibelt alla gånger. Programmen har dessutom gått långsamt att köra och de ständiga utökningarna och förändringarna i Java som programmeringsspråk har gjort det svårt att hålla sig uppdaterad. Jämför med C eller C++ och du finner en helt annan stabilitet. Så den kritiska frågan vad gäller Java har alltid varit: hur fungerar visionerna i praktiken?

  5. Övning — Applet/servlet-kommunikation • Det finns åtminstone tre olika sätt att låta applets kommunicera med servlets: http, sockets och rmi. I den här övningen kommer vi att undersöka hur kommunikatioinen går till via http. • Vad går övningen ut på? Du kommer att sitfta bekanstskap med servlets och öva på att programmera i Java. Målet är att bygga en fungerande Java-applikation för att söka i en adresslista. • På servern vi satt upp här vid KTH finns en servlet som söker i en påhittad telefonlista: • Gunnar Gren, Stora Gatan 18, 119 23 Storstad • Lisa Nilsson, Lilla Gata 3, 115 21 Stora Skogen • Per Persson, Bygatan 45, 122 11 Stenviken • Magnus Eriksson, Torpstigen 76, 121 33 Bergered • Anna Svensson, Friviken 98, 121 23 Byberga • Lotta Rostander, Granstigen 21, 133 45 Senholma • Hans Gobin, Finstedtsgatan 3, 213 11 Lindsered • När du exempelvis söker på Lotta skickar servleten tillbaka raden: • Lotta Rostander, Granstigen 21, 133 45 Senholma • Servleten skickar tillbaka samtliga rader som innehåller sökordet.

  6. Testa Servlet • Servleten kan anropas med en URL med inbäddade sökargument: • Servleten får sin sökparameter med GET-metoden enligt CGI-standarden. • CGI står för Common Gateway Interface och anger bl a hur parametrar skickas till ett program på en Webbserver. • ? ovan indikerar var parametrarna börjar. • target=Lotta betyder att parametern med namnet target har värdet Lotta.

  7. Testa Servleten • Prova själv att söka som nedan men med andra parametrar: • Prova själv att söka på ord från listan nedan: • Gunnar Gren, Stora Gatan 18, 119 23 Storstad • Lisa Nilsson, Lilla Gata 3, 115 21 Stora Skogen • Per Persson, Bygatan 45, 122 11 Stenviken • Magnus Eriksson, Torpstigen 76, 121 33 Bergered • Anna Svensson, Friviken 98, 121 23 Byberga • Lotta Rostander, Granstigen 21, 133 45 Senholma • Hans Gobin, Finstedtsgatan 3, 213 11 Lindsered • Skriv t ex in http://130.237.228.86/address.html?target=Stenviken för att söka efter någon som bor där.

  8. Servlet-koden • Tre delar i servlet-koden är särskilt intressanta. • 1. Klassbiblioteken - Första delen länkar in särskilda klassbibliotek för servlets. Dessa behövs för att kunna skriva servlets och innehåller många praktiska metoder. • 2. Initiering - Andra delen läser in telefonlistan från en fil på hårddisken och lagrar den i en vektor. Detta sker endast första gången som servleten körs. Listan ligger sedan kvar tillsammans med servleten i primärminnet. • 3. Sökning - Tredje delen söker igenom vektorn efter sökparametern. För varje träff i listan skickas raden till klienten.

  9. Servlet-koden import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class AdressServlet extends HttpServlet{ Vector v=new Vector(); public void init(ServletConfig conf) throws ServletException { String line; try{BufferedReader in=new BufferedReader(new FileReader("public_html/phonelist.txt")); while((line=in.readLine())!=null) v.addElement(line); in.close(); }catch (IOException e){ System.out.println("Exception: " + e); } } public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html"); ServletOutputStream out = res.getOutputStream(); int i=0; while(i<v.size()){ if((v.elementAt(i).toString().indexOf(req.getParameter("target"))!=-1)&&(i<(v.size()-1))) out.println(v.elementAt(i).toString()+"<p>"); i++; } } } 1. servletklasser 2. Initiering - läser in telefonlistan i en vektor 3. Söker sträng i vektorn och skickar träffar til klienten

  10. Låt oss undersöka närmare hur Servleten är uppbyggd: Klassbiblioteken java.io.* och import java.util.* känner du säkert igen. import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; Klassbiblioteken javax.servlet.* och javax.servlet.http.* är särskilda bibliotek för att skriva servlets. javax.servlet är ett generellt servlet-bibliotek och javax.servlet.http innehåller klasser för kommunikation enligt HTTP-protokollet. Servlet-koden

  11. Servlet-koden Den först raden anger att klassen kommer att bygga vidare på HttpServlet som har inbyggda funktioner för att hantera http-kommunikation. public class AdressServlet extends HttpServlet{ En vektor skapas för att lagra adresslistan i: Vector v=new Vector(); Om det är första gången servleten körs init-metoden och adresslistan läses in i vektorn: public void init(ServletConfig conf) throws ServletException { String line; try{BufferedReader in=new BufferedReader(new FileReader("public_html/phonelist.txt")); while((line=in.readLine())!=null) v.addElement(line); in.close(); }catch (IOException e){ System.out.println("Exception: " + e); } }

  12. Servlet-koden Den andra delen av servleten tar han om förfrågan. public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { Servleten ska skicka tillbaka text: res.setContentType("text/html"); ServletOutputStream out = res.getOutputStream(); int i=0; while(i<v.size()){ Metoden getParameter(parameter) ger tillbaka värdet för GET-parametern och sedan söker vi på det värdet rad för rad i vektorn med adresserna: if((v.elementAt(i).toString().indexOf(req.getParameter("target"))!=-1)&&(i<(v.size()-1))) För varje träff så skickar vi textraden från adresslistan till klienten och bifogar en styckekod sist för att få nya rader ( bra om servleten anropas med en webbläsare). out.println(v.elementAt(i).toString()+"<p>"); i++; } }

  13. Java-applikationen • På liknande sätt som du kan skriva in en URL med sökparameter för att köra servleten så kan ett program göra det. • Koden på nästa sida visar hur.

  14. Grundkod för Java-applikationen • import java.net.*;import java.io.*;public class AdressKlient{ public static void main(String[] args){ String line; try{ URL u=new URL("http://130.237.228.86/address.html?target=Lotta"); • DataInputStream text=new DataInputStream(u.openStream()); • while((line=text.readLine())!=null) • System.out.println(line); • } • catch(IOException e){ • System.err.println(e); • } • } • } Skapa ett URL-objekt och öppna en in-ström Läs/skriv ut rader Resultat av körning

  15. Vad blir då din uppgift? • Utgå från grundkoden för Java-applikationen på föregående sida och skriv om den så att den får ett användargränssnitt där användaren kan skriva in sökord i ett sökfält och där sökresultet visas i ett textfält. Användaren ska också kunna söka flera gånger utan att behöva starta om applikationen. • Om du vill få mer bakgrundsinformation om GET och att hämta data med URL:er i kapitel fem i Rusty. Kapitel femton tar också upp servlets. • Lycka Till! • /Anders

More Related