300 likes | 457 Views
ITK:P2 F9. HTTP, Java servlets och Apache Tomcat. DSV Peter Mozelius. Klienter och servrar. HTTP. HTTP ( H yper T ext T ransfer P rotocol) är ett protokoll som framför allt talas mellan webbläsare och webbservrar
E N D
ITK:P2 F9 HTTP, Java servlets och Apache Tomcat DSV Peter Mozelius
HTTP • HTTP (HyperText Transfer Protocol) är ett protokoll som framför allt talas mellan webbläsare och webbservrar • HTTP-protokollet började användas 1990 som en ersättare till det äldre Gopher • Första versionen var HTTP/0.9 • HTTP/0.9 har ett enda kommando: GET • Senare versioner är 1.0 och 1.1 (1996)
URL • Uniform Resource Locator • URL-syntaxen finns specificerad för en rad olika protokoll i RFC 1738 • Vi tittar här på hur den ser ut för HTTP som är protokollet för hemsidor/webben http://host[:port]/path/filename[#section] (+ eventuell följande ?query_string)
URL • Vi tittar på den URL som leder fram till en hemsida med lite material till denna kurs: http://www.dsv.su.se/~mozelius/ITKP2/ http://host[:port]/path/filename[#section] • protocol/protokoll är http:// • host/värddator är www.dsv.su.se • port ärHTTP:s defaultport:80 • path/sökväg är ~mozelius/ITKP2/ • filename/filnamn blir index.html
HTTP kommandon • GET • POST • HEAD • TRACE • PUT • DELETE
GET och POST • I 99% så handlar det om GET och POST • GET • tänkt för att hämta saker från servern • skickar data med URL + frågesträng • vissa servrar klipper av frågesträngen efter x antal tecken • POST • skickar data till servern utan att klienten ser • passar bättre för stora mängder data • säkrare än GET
Java servlets • Som applets fast på serversidan • Skrivs i språket Java precis som applets och vanliga applikationer import javax.servlet.*; Grundläggande servletklasser import javax.servlet.http.*; Klasser som hanterar HTTP kommandon
Java servlets • Ett effektivt alternativ till CGI-lösningar • CGI startar en ny process för varje anrop • Servlets startar bara en ny tråd • CGI avslutar processen efter anropet • Servlets ligger kvar i minnet
Servlets och HTTP • Metoder för HTTP i en servlet • doGet() • doPost() • doHead() • doTrace() • doPut() • doDelete()
doGet() och doPost() När du behöver bägge metoderna i en servlet så kan de med fördel kombineras enligt: • public void doGet(HttpServletRequestrequest, HttpServletResponse response) { • Här finns koden som gör jobbet; • } • public void doPost(HttpServletRequestrequest, HttpServletResponse response) { • doGet(request, response); • }
HttpServletRequest • Ett sätt att få tag i viktig information • HTTP Request = klientens förfrågan • Läs innehållet i Request Header genom: • request.getHeader() • request.getHeaderNames() • request.getContentType() • request.getContentLength()
HttpServletRequest • Andra användbara metoder är: • request.getMethod() • request.getProtocol() • request.getRequestURI() • request.getParameter() • request.getCookies()
HttpServletResponse • HTTP Response = serverns svar • Här finns metoder som t ex • response.addCookie()//lägg till en kaka En annan användbar metod är: response.getWriter() Öppnar enPrintWriter för utskrifter
Cookies/Kakor • Med kakor så kan besökarnas individuella önskemål registreras och kommas ihåg • En vanlig MEN omdiskuterad teknik • I en del webbläsare är kakfunktionen avstängd • Cookies är inte en del av HTTP utan en bit data som kan bäddas in i en request | response • Från början en Netscape extension
En liten enkel servlet Vi ska nu titta på koden för en riktigt enkel servlet som inte gör mer än att skriva ut det gamla vanliga Hello World! Först behövs följande importsatser: import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
En liten enkel servlet public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String protokoll = request.getProtocol(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>");
En liten enkel servlet out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hallå klient!</h1>"); out.println("<p>Protokollet är: "); out.println(protokoll+ ”</p>"); out.println("</body>"); out.println("</html>"); } } Paus 15 minuter
Apache Tomcat • Det finns flera sätt att köra servlets • Ett mycket vanligt sätt är m h a Tomcat • Som alltid när det gäller Apacheprodukter • helt fri att använda • öppen källkod • Följer servlet- och JSP-specifikatioerna • Det sätt som vi kommer att använda • MEN det finns kommersiella alternativ
Apache Tomcat • Det kommer hela tiden nya versioner • Det finns en del smådetaljer som skiljer Mer information finns på: http://jakarta.apache.org/tomcat/
Apache Tomcat • Starta Tomcat: • startup.bat • startup.sh • Stoppa Tomcat: • shutdown.bat • shutdown.sh
Apache Tomcat • Anropa Tomcat genom: • http://127.0.0.1:8080/ • http://localhost:8080/index.jsp
Apache Tomcat • Om du använder SDK standard edition • Se till att servlet.jar finns med i din CLASSPATH • Exempelvis: • SET CLASSPATH= .;E:\tomcat\lib\servlet.jar • OBS jar-filen heter fr o m version5 servlet-api.jar • I autoexec.bat för Win9X • I kontrollpanelen/miljövariabler för WinXP
Apache Tomcat • Två andra miljövariabler är: • JAVA_HOME (Exempelvis:C:\jdk1.5.x\) • och • CATALINA_HOME (Sökvägen till Tomcat)
Konfigurationsfiler Tomcat har många konfigurationsfiler Två av dem är: • web.xml • mappning av servlets CATALINA_HOME\webapps\context\WEB-INF\ • server.xml • Mappning av servlet context mm CATALINA_HOME\conf\
XHTML för servlets • Vanligt är att starta en servlet från ett XHTML-dokument • Användbara taggar är • <form> • <input> • type = "text” • type = "submit"
XHTML för servlets <h4>Hej, fyll i för och efternamn:</h4> <form action = "http://localhost:8080/mozelius/F3" method = "get"> <p> <label> <input type = "text" name = "fnamn" value =”Bo" /> <input type = "text" name = "enamn" value =”Ek"/> <input type = "submit" value = "Skicka" /> </label> </p> </form>
Uppgift D • Nu kan ni köra igång med Uppgift D Tack för idag!