Presentation laddar. Vänta.

Presentation laddar. Vänta.

Java Beans

Liknande presentationer


En presentation över ämnet: "Java Beans"— Presentationens avskrift:

1 Java Beans RickardEnander@parallelconsulting.com

2 Vad krävs av er idag? n Någon kunskap om Java n Intresse för komponenter n Eventuellt överenseende med demo-demoner

3 Agenda n Motivation för Servlets n Servlets jämfört med CGI n Servlet API n Exempel n Hur man börjar utveckla n Summering och vissa ”issues”

4 Motivet för Servlets n HTML sidor är inte nog –vi behöver ha någon logik bakom sidorna n Idag(?) är CGI det vanliga sättet n Servlet kan ses som en Java-version av CGI –men bättre

5 Vad är då CGI? Common Gateway Interface n Vanligt sätt att generera dynamisk HTML n Vad som händer är –Web-servern startar ett program –Programmet läser indata från stdin –Programmet “gör” något –Programmet skriver HTML till stdout –Web serverns returnerar genererad HTML till klienten

6 Vad är dåligt med CGI? n Nytt program startar varje gång –dyrt resursmässigt n Tillståndslöst –hur håller man en session n Finns bättre varianter idag

7 Vad gör Servlet bättre? n Initierase av ServletServern en gång –instansen “dör inte” mellan anrop –billigare n Kan hantera många anrop på en gång n Ren Java, plattformsoberoende n Can anropas från HTML eller från Applet n Man kan kommunicera mellan Servlets

8 Servlet, “the big picture” n Någon Servlet Server –kör och administrerar Servlet:s –laddar och “avladdar” –kallar rätt Servlet –typiskt en Servlet “enabled” WebServer

9 Servlet, på klientsidan n Typiskt från en browser –pekar på en URL n Kan också vara vilken Java app som helst –Applet –Annan Servlet –Applikation

10 Servlet paket n Två package av intresse n javax.servlet –Inrefarces –Man börjar normalt inte från denna nivå n javax.servlet.http –specialicerade för HTTP –normalt så startar man härifrån

11 Servlet API n Består av ett par klasser –ServlertInterface –GenericServletClass –ServletConfigInterface –ServletOutputStream, ServletInputStream –ServletRequestInterface –ServletRespondInterface n Normalt inte av intresse

12 ServletInterface n Några metoder definierade –init( ServletConfig ) –destroy() –service( ServletRequest, ServletResponce ) –getServletConfig() –getServletInfo()

13 GenericServlet n Abstrakt klass att starta ifrån –Implementerar ServletInterface –Ytterligare några metoder

14 HTTP paketet n Normal startpunkt –HttpServlet –HttpServletResponseInterface –HttpServletRequestInterface –HttpSession –HttpUtil

15 Den intressanta klassen är HttpServlet n Gör override på en eller flera metoder –goGet( HttpServletRequest request, HttpServletRequest response) –doPut( HttpServletRequest request, HttpServletRequest response) –service( ServletRequest request, ServletRequest response) n normalt rör man ej service –den kallar doGet eller DoPut med data

16 Det finns ett antal metoder ytterligare i HttpServlet n init ( ServletConfig ) –initiering, t.ex. databasförbindelse –kallas från ServletServern en gång n destroy () –stäng t.ex. databasförbindelse –kallas från ServletServern en gång n getServletInfo –informationssträng, används av Servern

17 Klassen HttpServletRequest håller preparedad data n Metoden service lägger in information automatiskt –getRequestURI, getServerPath –getParameters( string name ) –getParameterNames, getParametervalues –getSession

18 Klassen HttpServletResponse används för att returnera data n Innehåller funktionalitet att returnera data –setHeader –sendError –sendRedirect –getOutputStream n stream att skriva sin HTML till

19 Klassen HttpSession hjälper dig att hålla en session n Data mellan anrop n måste ha unikt ID på något sätt n ServletServern lagrar data mellan anrop n Metoder som normalt används –getValue, removeValue –getValueNames –putValue –isNew, invalidate

20 Innan vi går till exempel repeterar vi livscykeln n Livscykeln från Serverns perspektiv –Servern initierar en Servlet och anroper init –Servern anropar service-metoden många gånger –Servern avinstansierar en Servlet och anropar destroy

21 Första exemplet, en mycket enkel Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Ex1 extends HttpServlet

22 Gör override på metoden doGet public void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(" Simple Servlet "); out.println(" "); out.println(" Simple Servlet "); out.println("Simple output."); out.println(" "); out.close(); }

23 Ex2 är en Servlet med tillstånd n Addera en variabel n Addera en init-metod int counter = 1000; public void init(ServletConfig config) throws ServletException { System.out.println("Initiating the Ex2 servlet"); counter = 0; }

24 Öka counter i varje anrop public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,IOException { // added lines in doGet counter++; out.println("Counter value : " + counter ); }

25 Ex3 läser data från request out.println( "Request method :" + request.getMethod() ); out.println( "Request URI :" + request.getRequestURI() ); out.println( "Request protocol :" + request.getProtocol() ); out.println( "Servlet path :" + request.getServletPath()); out.println( "Path info :" + request.getPathInfo() ); out.println( " There are a lot more info” + “to get (see next example)");

26 I Ex4 så skickar parametar i anropet n http://localhost:8080/servlet/Ex4?Service=test¶m1=3 Enumeration e = request.getParameterNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getParameter(name); out.println("Parameter : " + name + " = " + request.getParameter(name)); } Parameter : param1 = 33 Parameter : Service = test

27 Ex5, använd ett HTML form för input What is your income? 1-100 100-200 200-300 300-400 500-more Your name? What TV shows do yo watch? Operah Rapport Bingo Lotto –På klientsidan

28 Ex5, läs av parametrarna Enumeration e = request.getParameterNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String vals[] = (String[]) request.getParameterValues(name); if (vals != null) { for (int i = 0; i { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.se/11/3236908/slides/slide_28.jpg", "name": "Ex5, läs av parametrarna Enumeration e = request.getParameterNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String vals[] = (String[]) request.getParameterValues(name); if (vals != null) { for (int i = 0; i

29 En servlet kan ha “minne” mellan anrop baserat på ID n Typfallet är en affär –man besöker flera avdelningar –adderar saker till shoppingvagnen n Servlet:en måste minnas vad som plockas –lagra data –identifiera användaren

30 Servlet session n Identifikation av användaren –genom cockies –genom URL extension n Data mellan anropen –måste identifiera –kan få data från HttpSession

31 Exempel på session n Håller reda på antal inviduella anrop public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,IOException { counter++; HttpSession session = request.getSession(true);

32 Hämtar och sparar undan data // Get data with specific key Integer ival = (Integer) session.getValue("Ex6.count"); if (ival==null) // if null (first time) ival = new Integer(1); else ival = new Integer(ival.intValue() + 1); session.putValue("Ex6.count", ival);// put back // Write out the data out.println("You have hit this page " + ival + " times. "); out.println("Total hits to this page " + counter + " times. ");

33 Andra saker som kan tas fram: out.println(" Request and Session Data: "); out.println("Session ID in Request: " + request.getRequestedSessionId()); out.println(" Is Session ID in Request from Cookie: ” + request.isRequestedSessionIdFromCookie()); out.println(" Is Session ID in Request from URL: " + request.isRequestedSessionIdFromUrl()); out.println(" Is Session ID valid : " + request.isRequestedSessionIdValid());

34 Andra saker som kan tas fram: out.println(" Session Data: "); out.println("New Session: " + session.isNew()); out.println(" Session ID: " + session.getId()); Date crt = new Date( session.getCreationTime() ); out.println(" Creation Time: " + crt); Date lat = new Date( session.getLastAccessedTime() ); out.println(" Last Accessed Time: " + lat );

35 Att tänka på n Threads –Finns bara en instans av varje Servlet –måste vara thread safe –alternativt n implements SingleThreadModel

36 Hur man gör på sin egen maskin för att utveckla Servlets n Setup –JDK –JSDK2.0 n http://java.sun.com/products/servlet/index.html –CLASSPATH c:\jsdk2.0\lib –PATHc:\jsdk2.0\bin

37 Hur man gör på sin egen maskin för att utveckla Servlets n Kör –Starta ServletRunner –Placera dina Servlets i JSDK2.0/examples –Starta om SrrvletRunner efter omkompilering –Kör från t.ex. Netscape

38 Hur man gör på sin egen maskin för att utveckla Servlets, forts n Starta en Servlet Server –ServletRunner eller en WebServer n Skriv dina egna Servlet:s –som vanligt –Placera dina Servlets i JSDK2.0/examples –Starta om ServletRunner efter omkompilering –Kör från t.ex. Netscape


Ladda ner ppt "Java Beans"

Liknande presentationer


Google-annonser