java beans
DESCRIPTION
Java Beans. [email protected]. Vad krävs av er idag?. Någon kunskap om Java Intresse för komponenter Eventuellt överenseende med demo-demoner. Agenda. Motivation för Servlets Servlets jämfört med CGI Servlet API Exempel Hur man börjar utveckla - PowerPoint PPT PresentationTRANSCRIPT
Java BeansJava Beans
[email protected]@parallelconsulting.comcom
Vad krävs av er idag?Vad krävs av er idag?
Någon kunskap om JavaNågon kunskap om Java Intresse för komponenterIntresse för komponenter Eventuellt överenseende med Eventuellt överenseende med
demo-demonerdemo-demoner
AgendaAgenda
Motivation för ServletsMotivation för Servlets Servlets jämfört med CGIServlets jämfört med CGI Servlet APIServlet API ExempelExempel Hur man börjar utvecklaHur man börjar utveckla Summering och vissa ”issues”Summering och vissa ”issues”
Motivet för ServletsMotivet för Servlets
HTML sidor är inte nogHTML sidor är inte nog– vi behöver ha någon logik bakom sidornavi behöver ha någon logik bakom sidorna
Idag(?) är CGI det vanliga sättetIdag(?) är CGI det vanliga sättet
Servlet kan ses som en Java-version Servlet kan ses som en Java-version av CGIav CGI– men bättremen bättre
Vad är då CGI?Vad är då CGI?Common Gateway Common Gateway
InterfaceInterface
Vanligt sätt att generera dynamisk Vanligt sätt att generera dynamisk HTMLHTML
Vad som händer ärVad som händer är– Web-servern startar ett programWeb-servern startar ett program– Programmet läser indata från stdinProgrammet läser indata från stdin– Programmet “gör” någotProgrammet “gör” något– Programmet skriver HTML till stdoutProgrammet skriver HTML till stdout– Web serverns returnerar genererad HTML Web serverns returnerar genererad HTML
till kliententill klienten
Vad är dåligt med CGI?Vad är dåligt med CGI?
Nytt program startar varje gångNytt program startar varje gång– dyrt resursmässigtdyrt resursmässigt
TillståndslöstTillståndslöst– hur håller man en sessionhur håller man en session
Finns bättre varianter idagFinns bättre varianter idag
Vad gör Servlet bättre?Vad gör Servlet bättre?
Initierase av ServletServern en gångInitierase av ServletServern en gång– instansen “dör inte” mellan anropinstansen “dör inte” mellan anrop– billigarebilligare
Kan hantera många anrop på en gångKan hantera många anrop på en gång Ren Java, plattformsoberoendeRen Java, plattformsoberoende Can anropas från HTML eller från Can anropas från HTML eller från
AppletApplet Man kan kommunicera mellan ServletsMan kan kommunicera mellan Servlets
Servlet, “the big picture”Servlet, “the big picture”
Någon Servlet ServerNågon Servlet Server– kör och administrerar Servlet:skör och administrerar Servlet:s– laddar och “avladdar”laddar och “avladdar”– kallar rätt Servletkallar rätt Servlet– typiskt en Servlet “enabled” typiskt en Servlet “enabled”
WebServerWebServer
Servlet, på klientsidanServlet, på klientsidan
Typiskt från en browserTypiskt från en browser– pekar på en URLpekar på en URL
Kan också vara vilken Java app Kan också vara vilken Java app som helstsom helst– AppletApplet– Annan ServletAnnan Servlet– ApplikationApplikation
Servlet paketServlet paket
Två package av intresseTvå package av intresse javax.servletjavax.servlet
– InrefarcesInrefarces– Man börjar normalt inte från denna Man börjar normalt inte från denna
nivånivå javax.servlet.httpjavax.servlet.http
– specialicerade för HTTPspecialicerade för HTTP– normalt så startar man härifrånnormalt så startar man härifrån
Servlet APIServlet API
Består av ett par klasserBestår av ett par klasser– ServlertInterfaceServlertInterface– GenericServletClassGenericServletClass– ServletConfigInterfaceServletConfigInterface– ServletOutputStream, ServletOutputStream,
ServletInputStreamServletInputStream– ServletRequestInterfaceServletRequestInterface– ServletRespondInterfaceServletRespondInterface
Normalt inte av intresseNormalt inte av intresse
ServletInterfaceServletInterface
Några metoder definieradeNågra metoder definierade– initinit ( ServletConfig )( ServletConfig )
– destroydestroy ()()– serviceservice ( ServletRequest,( ServletRequest,
ServletResponce ) ServletResponce )
– getServletConfiggetServletConfig ()()– getServletInfogetServletInfo ()()
GenericServletGenericServlet
Abstrakt klass att starta ifrånAbstrakt klass att starta ifrån– Implementerar ServletInterfaceImplementerar ServletInterface– Ytterligare några metoderYtterligare några metoder
HTTP paketetHTTP paketet
Normal startpunktNormal startpunkt– HttpServletHttpServlet– HttpServletResponseInterfaceHttpServletResponseInterface– HttpServletRequestInterfaceHttpServletRequestInterface– HttpSessionHttpSession– HttpUtilHttpUtil
Den intressanta klassen är Den intressanta klassen är HttpServletHttpServlet
Gör override på en eller flera metoderGör override på en eller flera metoder– goGetgoGet ( HttpServletRequest request,( HttpServletRequest request,
HttpServletRequest response) HttpServletRequest response)– doPutdoPut ( HttpServletRequest request,( HttpServletRequest request,
HttpServletRequest response) HttpServletRequest response)– serviceservice ( ServletRequest request,( ServletRequest request,
ServletRequest response) ServletRequest response) normalt rör man ej normalt rör man ej serviceservice
– den kallar doGet eller DoPut med dataden kallar doGet eller DoPut med data
Det finns ett antal metoder Det finns ett antal metoder ytterligare i HttpServletytterligare i HttpServlet
init ( ServletConfig )init ( ServletConfig )– initiering, t.ex. databasförbindelseinitiering, t.ex. databasförbindelse– kallas från ServletServern en gångkallas från ServletServern en gång
destroy ()destroy ()– stäng t.ex. databasförbindelsestäng t.ex. databasförbindelse– kallas från ServletServern en gångkallas från ServletServern en gång
getServletInfogetServletInfo– informationssträng, används av Serverninformationssträng, används av Servern
Klassen HttpServletRequest Klassen HttpServletRequest håller preparedad datahåller preparedad data
Metoden service lägger in Metoden service lägger in information automatisktinformation automatiskt
– getRequestURI, getServerPathgetRequestURI, getServerPath– getParameters( string name )getParameters( string name )– getParameterNames, getParameterNames,
getParametervaluesgetParametervalues– getSessiongetSession
Klassen HttpServletResponse Klassen HttpServletResponse används för att returnera används för att returnera datadata
Innehåller funktionalitet att Innehåller funktionalitet att returnera datareturnera data– setHeadersetHeader– sendErrorsendError– sendRedirectsendRedirect– getOutputStreamgetOutputStream
stream att skriva sin HTML tillstream att skriva sin HTML till
Klassen HttpSession hjälper Klassen HttpSession hjälper dig att hålla en sessiondig att hålla en session
Data mellan anropData mellan anrop måste ha unikt ID på något sättmåste ha unikt ID på något sätt ServletServern lagrar data mellan anropServletServern lagrar data mellan anrop Metoder som normalt användsMetoder som normalt används
– getValue, removeValuegetValue, removeValue– getValueNamesgetValueNames– putValueputValue– isNew, invalidateisNew, invalidate
Innan vi går till exempel Innan vi går till exempel repeterar vi livscykeln repeterar vi livscykeln
Livscykeln från Serverns Livscykeln från Serverns perspektivperspektiv– Servern initierar en Servlet och Servern initierar en Servlet och
anroper anroper initinit– Servern anropar Servern anropar serviceservice-metoden -metoden
många gångermånga gånger– Servern avinstansierar en Servlet och Servern avinstansierar en Servlet och
anropar anropar destroydestroy
Första exemplet, en mycket Första exemplet, en mycket enkel Servletenkel Servlet
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;
public class Ex1 extends HttpServlet
Gör override på metoden Gör override på metoden doGetdoGet
public void doGet ( HttpServletRequest request,HttpServletResponse response ) throws ServletException, IOException
{ response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML><HEAD><TITLE>Simple Servlet</TITLE></HEAD>"); out.println("<BODY>"); out.println("<H1> Simple Servlet</H1>"); out.println("Simple output."); out.println("</BODY></HTML>"); out.close();}
Ex2 är en Servlet med Ex2 är en Servlet med tillståndtillstånd
Addera en variabelAddera en variabel
Addera en init-metodAddera en init-metod
int counter = 1000;
public void init(ServletConfig config) throws ServletException
{ System.out.println("Initiating the Ex2 servlet"); counter = 0;}
Öka counter i varje anropÖ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 );}
Ex3 läser data från requestEx3 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( "<br> There are a lot more info” + “to get (see next example)");
I Ex4 så skickar parametar i I Ex4 så skickar parametar i anropetanropet
http://localhost:8080/servlet/Ex4?Service=test¶m1=3http://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 = 33Parameter : Service = test
Ex5, använd ett HTML form Ex5, använd ett HTML form för input för input
<form action=http://localhost:8080/servlet/Ex5><input type=hidden name=survey value=hello> <BR>What is your income?1-100 <input type=radio name=income value=1-100>100-200 <input type=radio name=income value=100-200>200-300 <input type=radio name=income value=200-300>300-400 <input type=radio name=income value=300-400>500-more <input type=radio name=income value=500-more>
<BR>Your name? <input type=text name=comment> <BR>What TV shows do yo watch? <BR>Operah <input type=checkbox name=tv value=Operah> <BR>Rapport <input type=checkbox name=tv value=Rapport> <BR>Bingo Lotto<input type=checkbox name=tv value=Bingo>
– På klientsidanPå klientsidan
Ex5, läs av parametrarnaEx5, 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 :<b>"+name + "</b> : "+vals[i]); } }}
En servlet kan ha “minne” En servlet kan ha “minne” mellan anrop baserat på IDmellan anrop baserat på ID
Typfallet är en affärTypfallet är en affär– man besöker flera avdelningarman besöker flera avdelningar– adderar saker till shoppingvagnenadderar saker till shoppingvagnen
Servlet:en måste minnas vad som Servlet:en måste minnas vad som plockasplockas– lagra datalagra data– identifiera användarenidentifiera användaren
Servlet sessionServlet session
Identifikation av användarenIdentifikation av användaren– genom cockiesgenom cockies– genom URL extensiongenom URL extension
Data mellan anropenData mellan anropen– måste identifieramåste identifiera– kan få data från HttpSessionkan få data från HttpSession
Exempel på sessionExempel på session
Håller reda på antal inviduella anrop Håller reda på antal inviduella anrop
public void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException,IOException{ counter++;
HttpSession session = request.getSession(true);
Hämtar och sparar undan Hämtar och sparar undan datadata
// Get data with specific keyInteger 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 dataout.println("You have hit this page <b>" +
ival + "</b> times.<p>");out.println("Total hits to this page <b>" + counter +
"</b> times.<p>");
Andra saker som kan tas Andra saker som kan tas fram:fram:
out.println("<h3>Request and Session Data:</h3>");
out.println("Session ID in Request: " + request.getRequestedSessionId());
out.println("<br>Is Session ID in Request from Cookie: ” + request.isRequestedSessionIdFromCookie());
out.println("<br>Is Session ID in Request from URL: " + request.isRequestedSessionIdFromUrl());
out.println("<br>Is Session ID valid : " + request.isRequestedSessionIdValid());
Andra saker som kan tas Andra saker som kan tas fram:fram:
out.println("<h3>Session Data:</h3>");
out.println("New Session: " + session.isNew());out.println("<br>Session ID: " + session.getId()); Date crt = new Date( session.getCreationTime() );out.println("<br>Creation Time: " + crt); Date lat = new Date( session.getLastAccessedTime() );out.println("<br>Last Accessed Time: " + lat );
Att tänka påAtt tänka på
ThreadsThreads– Finns bara en instans av varje ServletFinns bara en instans av varje Servlet– måste vara thread safemåste vara thread safe– alternativt alternativt
implements SingleThreadModelimplements SingleThreadModel
Hur man gör på sin egen Hur man gör på sin egen maskin för att utveckla maskin för att utveckla ServletsServlets
SetupSetup– JDK JDK – JSDK2.0JSDK2.0
http://java.sun.com/products/servlet/http://java.sun.com/products/servlet/index.htmlindex.html
– CLASSPATH CLASSPATH c:\jsdk2.0\libc:\jsdk2.0\lib– PATHPATH c:\jsdk2.0\binc:\jsdk2.0\bin
Hur man gör på sin egen Hur man gör på sin egen maskin för att utveckla maskin för att utveckla ServletsServlets
KörKör– Starta ServletRunnerStarta ServletRunner– Placera dina Servlets i Placera dina Servlets i
JSDK2.0/examplesJSDK2.0/examples– Starta om SrrvletRunner efter Starta om SrrvletRunner efter
omkompileringomkompilering– Kör från t.ex. NetscapeKör från t.ex. Netscape
Hur man gör på sin egen Hur man gör på sin egen maskin för att utveckla maskin för att utveckla Servlets, fortsServlets, forts
Starta en Servlet ServerStarta en Servlet Server– ServletRunner eller en WebServerServletRunner eller en WebServer
Skriv dina egna Servlet:sSkriv dina egna Servlet:s– som vanligtsom vanligt– Placera dina Servlets i JSDK2.0/examplesPlacera dina Servlets i JSDK2.0/examples– Starta om ServletRunner efter Starta om ServletRunner efter
omkompileringomkompilering– Kör från t.ex. NetscapeKör från t.ex. Netscape