request

January 9, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Java Programming
Share Embed Donate


Short Description

Download request...

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  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
View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF