java beans

38
Java Beans Java Beans RickardEnander@parallelconsult RickardEnander@parallelconsult ing.com ing.com

Upload: sirvat

Post on 06-Jan-2016

33 views

Category:

Documents


3 download

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 Presentation

TRANSCRIPT

Page 1: Java Beans

Java BeansJava Beans

[email protected]@parallelconsulting.comcom

Page 2: Java Beans

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

Page 3: Java Beans

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”

Page 4: Java Beans

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

Page 5: Java Beans

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

Page 6: Java Beans

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

Page 7: Java Beans

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

Page 8: Java Beans

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

Page 9: Java Beans

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

Page 10: Java Beans

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

Page 11: Java Beans

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

Page 12: Java Beans

ServletInterfaceServletInterface

Några metoder definieradeNågra metoder definierade– initinit ( ServletConfig )( ServletConfig )

– destroydestroy ()()– serviceservice ( ServletRequest,( ServletRequest,

ServletResponce ) ServletResponce )

– getServletConfiggetServletConfig ()()– getServletInfogetServletInfo ()()

Page 13: Java Beans

GenericServletGenericServlet

Abstrakt klass att starta ifrånAbstrakt klass att starta ifrån– Implementerar ServletInterfaceImplementerar ServletInterface– Ytterligare några metoderYtterligare några metoder

Page 14: Java Beans

HTTP paketetHTTP paketet

Normal startpunktNormal startpunkt– HttpServletHttpServlet– HttpServletResponseInterfaceHttpServletResponseInterface– HttpServletRequestInterfaceHttpServletRequestInterface– HttpSessionHttpSession– HttpUtilHttpUtil

Page 15: Java Beans

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

Page 16: Java Beans

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

Page 17: Java Beans

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

Page 18: Java Beans

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

Page 19: Java Beans

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

Page 20: Java Beans

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

Page 21: Java Beans

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

Page 22: Java Beans

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();}

Page 23: Java Beans

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;}

Page 24: Java Beans

Ö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 );}

Page 25: Java Beans

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)");

Page 26: Java Beans

I Ex4 så skickar parametar i I Ex4 så skickar parametar i anropetanropet

http://localhost:8080/servlet/Ex4?Service=test&param1=3http://localhost:8080/servlet/Ex4?Service=test&param1=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

Page 27: Java Beans

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

Page 28: Java Beans

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]); } }}

Page 29: Java Beans

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

Page 30: Java Beans

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

Page 31: Java Beans

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);

Page 32: Java Beans

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>");

Page 33: Java Beans

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());

Page 34: Java Beans

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 );

Page 35: Java Beans

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

Page 36: Java Beans

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

Page 37: Java Beans

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

Page 38: Java Beans

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