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 Summering och vissa ”issues”
Motivet för Servlets
HTML sidor är inte nog – vi behöver ha någon logik bakom sidorna
Idag(?) är CGI det vanliga sättet
Servlet kan ses som en Java-version av CGI – men bättre
Vad är då CGI? Common Gateway Interface Vanligt sätt att generera dynamisk HTML 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
Vad är dåligt med CGI?
Nytt program startar varje gång – dyrt resursmässigt
Tillståndslöst – hur håller man en session
Finns bättre varianter idag
Vad gör Servlet bättre?
Initierase av ServletServern en gång – instansen “dör inte” mellan anrop – billigare
Kan hantera många anrop på en gång Ren Java, plattformsoberoende Can anropas från HTML eller från Applet Man kan kommunicera mellan Servlets
Servlet, “the big picture”
Någon Servlet Server – kör och administrerar Servlet:s – laddar och “avladdar” – kallar rätt Servlet – typiskt en Servlet “enabled” WebServer
Servlet, på klientsidan
Typiskt från en browser – pekar på en URL
Kan också vara vilken Java app som helst – Applet – Annan Servlet – Applikation
Servlet paket Två package av intresse javax.servlet
– Inrefarces – Man börjar normalt inte från denna nivå
javax.servlet.http – specialicerade för HTTP – normalt så startar man härifrån
Servlet API
Består av ett par klasser – ServlertInterface – GenericServletClass – ServletConfigInterface – ServletOutputStream, ServletInputStream – ServletRequestInterface – ServletRespondInterface
Normalt inte av intresse
ServletInterface
Några metoder definierade – init – destroy – service
( ServletConfig ) () ( ServletRequest, ServletResponce ) – getServletConfig () – getServletInfo ()
GenericServlet
Abstrakt klass att starta ifrån – Implementerar ServletInterface – Ytterligare några metoder
HTTP paketet
Normal startpunkt – HttpServlet – HttpServletResponseInterface – HttpServletRequestInterface – HttpSession – HttpUtil
Den intressanta klassen är HttpServlet
Gör override på en eller flera metoder – goGet – doPut – service
( HttpServletRequest request, HttpServletRequest response) ( HttpServletRequest request, HttpServletRequest response) ( ServletRequest request, ServletRequest response)
normalt rör man ej service – den kallar doGet eller DoPut med data
Det finns ett antal metoder ytterligare i HttpServlet
init ( ServletConfig ) – initiering, t.ex. databasförbindelse – kallas från ServletServern en gång
destroy () – stäng t.ex. databasförbindelse – kallas från ServletServern en gång
getServletInfo – informationssträng, används av Servern
Klassen HttpServletRequest håller preparedad data
Metoden service lägger in information automatiskt – getRequestURI, getServerPath – getParameters( string name ) – getParameterNames, getParametervalues – getSession
Klassen HttpServletResponse används för att returnera data
Innehåller funktionalitet att returnera data – setHeader – sendError – sendRedirect – getOutputStream
stream att skriva sin HTML till
Klassen HttpSession hjälper dig att hålla en session Data mellan anrop måste ha unikt ID på något sätt ServletServern lagrar data mellan anrop Metoder som normalt används
– getValue, removeValue – getValueNames – putValue – isNew, invalidate
Innan vi går till exempel repeterar vi livscykeln
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
Första exemplet, en mycket enkel Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Ex1 extends HttpServlet
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(); }
Ex2 är en Servlet med tillstånd
Addera en variabel
Addera 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 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 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)");
I Ex4 så skickar parametar i anropet
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
Ex5, använd ett HTML form för input – På klientsidan 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
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