Ladda ner presentationen
Presentation laddar. Vänta.
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<vals.length; i++) { out.println("Parameter : "+name + " : "+vals[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
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.