Title: Praxis der Internet-Programmierung
1Praxis der Internet-Programmierung
2Statische Webseiten
- 11-Ausgabe der angeforderten Datei
- Dynamische Komponenten auf der Client-Seite
- Scripts (ECMAScript, JavaScript,)
- Plug-Ins (Java Applets, Macromedia Flash, )
3Dynamische Webseiten
- Erzeugung der Ausgabe zur Laufzeit
- "Web-Anwendung",
4Server-seitige Technologien
- Common Gateway Interface (CGI)
- Ausführung in einem Webserver-externen Prozess
- kein Zugriff auf Ressourcen des Webservers
- je ein eigener Prozess pro Anfrage
- beliebige Sprachen möglich (C/C, Perl, Java,
) - Interpretiert / kompiliert
5Server-seitige Technologien
- Server-seitige Skripte
- Serverside JavaScript SSJS (Netscape)
- Active ServerPages ASP (Microsoft)
- Hypertext Preprocessor PHP (Apache)
- JavaServer Pages JSP (Sun)
6Bsp ASP
ltHTMLgt lt!-- This example displays the content of
several ServerVariables. --gt ALL_HTTP server
variable lt Request.ServerVariables("ALL_HTTP"
) gt ltBRgt CONTENT_LENGTH server variable lt
Request.ServerVariables("CONTENT_LENGTH") gt ltBRgt
CONTENT_TYPE server variable lt
Request.ServerVariables("CONTENT_TYPE") gt ltBRgt
QUERY_STRING server variable lt
Request.ServerVariables("QUERY_STRING") gt ltBRgt
SERVER_SOFTWARE server variable lt
Request.ServerVariables("SERVER_SOFTWARE") gt
ltBRgt lt/HTMLgt
7Java Servlet Framework
8JSEE Versionen
- Java Servlet 2.2 (17.12.1999)
- "write once, serve anywhere
- stabil
- Servletcontainer Tomcat 3.3
- Servlet API 2.2
- JSP 1.1
- für Entwickler
- Servletcontainer Tomcat 4.0
- Servlet API 2.3
- JSP 1.2
9Servlets die Antwort auf CGI Programmierung
- Servlets laufen auf einem Webserver in einem
Servletcontainer. - Aufgaben
- Zugriff auf REQUEST
- Erzeugen einer Antwort
- Formatierung der Antwort in einem Dokument
- Senden des RESPONSE
- kein eigenständiges Programm!
- keine main()-Methode!
10Vorteile
- Alle Servlets können in einer JVM laufen
- Erleichtert die Kommunikation
- Portabilität / Stabilität / Platformunabhängikeit
- Sicherheit
- nur eine Sprache
- Funktionalität durch Methodenaufrufe auf das
Servlet Objekt - Servlet bleibt im Speicher erhalten
- Schnellem Starten bei einem neuen Request
- wenig Memory overhead
-
11javax.servlet
C\Programme\jbuilder5\extras\jakarta-tomcat-src\s
rc\webpages\docs\api
12Lebenszyklus eines Servlet
- Laden der Servlet-Klasse
- Erzeugen einer Instanz
- Ausführen der init()-Methode
- prüfen auf neuere Version des .class-Files
allenfalls neu laden - Ausführen der Methode service()
- z.B. Herunterfahren des Servers
- Ausführen der destroy()-Methode
- garbage collection
13Programmierung eines Servlets
- erweitern die abstract class javax.servlet.http.Ht
tpServlet (Subklasse von GenericServlet) - service() wird nicht überschrieben
- überschreiben der Methoden doGet(), doPost(),
doPut(), doDelete()
14HELLO WORLD
- package hello_world
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- public class HelloWorld extends HttpServlet
- public void doGet(HttpServletRequest req,
HttpServletResponse res) - throws
ServletException, IOException - res.setContentType("text/html")
- PrintWriter out res.getWriter()
- out.println("ltHTMLgt")
- out.println("ltHEADgtltTITLEgtHello
Worldlt/TITLEgtlt/HEADgt") - out.println("ltBODYgt")
- out.println("ltBIGgtHello Worldlt/BIGgt")
- out.println("lt/BODYgtlt/HTMLgt")
-
15Zugriff auf REQUEST
- public void doGet (HttpServletRequest req,
HttpServletResponse
res) - throws ServletException, IOException
- Interface HttpServletRequest
- getParameter()/getParametetValues()
- Zugriff auf die Name/Wert-Paare des REQUESTS
- getRemoteAddr() IP-Adresse des Clients
- getProtocol() benutztes Protokol
16HttpServletRequest API
17Zugriff auf RESPONSE
- public void doGet (HttpServletRequest req,
HttpServletResponse
res) - throws ServletException, IOException
- Interface HttpServletResponse
- Ausgabe mittels java.io.PrintWriter
- PrintWriter out res.getWriter()
- MIME-Format res.setContentType(CONTENT_TYPE)
- ASCII-Formate text/html, text/xml, text/plain,
18Hello II
- package hello_world
- import java.io.
- import javax.servlet.
- import javax.servlet.http.
- public class Hello extends HttpServlet
- public void doGet(HttpServletRequest req,
HttpServletResponse res) - throws
ServletException, IOException - res.setContentType("text/html")
- PrintWriter out res.getWriter()
- String name req.getParameter("name")
- out.println("ltHTMLgt")
- out.println("ltHEADgtltTITLEgtHello, " name
"lt/TITLEgtlt/HEADgt") - out.println("ltBODYgt")
- out.println("Hello, " name)
- out.println("lt/BODYgtlt/HTMLgt")
-
-
-
19Hello World Form
- ltHTMLgt
- ltHEADgt
- ltTITLEgtIntroductionslt/TITLEgt
- lt/HEADgt
- ltBODYgt
- ltFORM METHODGET ACTION"/servlet/hello_world.Hell
o"gt - If you don't mind me asking, what is your name?
- ltINPUT TYPETEXT NAME"name"gtltPgt
- ltINPUT TYPESUBMITgt
- lt/FORMgt
- lt/BODYgt
- lt/HTMLgt
20Request Headers IE 5.5
21Request Headers Netscape 6.0
22HTTP Request Header
- import javax.servlet.
- import javax.servlet.http.
- import java.io.
- import java.util.
- public class Request_all2 extends HttpServlet
- private static final String CONTENT_TYPE
"text/html" - /Initialize global variables/
- public void init(ServletConfig config) throws
ServletException - super.init(config)
-
-
23HTTP Request Header
- /Process the HTTP Get request/
- public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException - response.setContentType(CONTENT_TYPE)
- PrintWriter out response.getWriter()
- String title "Servlet Example Showing
Request Headers" - out.println(ServletUtilities.headWithTitle(tit
le) - "ltBODY BGCOLOR\"FDF5E6\"gt\n"
- "ltH1 ALIGNCENTERgt" title
"lt/H1gt\n" - "ltBgtRequest Method lt/Bgt"
- request.getMethod() "ltBRgt\n"
- "ltBgtRequest URI lt/Bgt"
- request.getRequestURI()
"ltBRgt\n" - "ltBgtRequest Protocol lt/Bgt"
24HTTP Request Header
- request.getProtocol()
"ltBRgtltBRgt\n" - "ltTABLE BORDER1 ALIGNCENTERgt\n"
- "ltTR BGCOLOR\"FFAD00\"gt\n"
- "ltTHgtHeader NameltTHgtHeader
Value") - Enumeration headerNames request.getHeaderNam
es() - while(headerNames.hasMoreElements())
- String headerName (String)headerNames.next
Element() - out.println("ltTRgtltTDgt" headerName)
- out.println(" ltTDgt" request.getHeader(h
eaderName)) -
- out.println("lt/TABLEgt\nlt/BODYgtlt/HTMLgt")
-
-
25HTTP Request Header
- /Process the HTTP Post request/
- public void doPost(HttpServletRequest request,
- HttpServletResponse
response) - throws ServletException, IOException
- doGet(request, response)
-
- /Clean up resources/
- public void destroy()
-
-
26Praktikum
- SERVLET Programmierung I
- Hello World Servlet
- Eigenes Servlet
- Gibt aktuelle Zeit aus
- Begrüsst Sie mit Morgen oder Abend
- Gibt erkennt ihren Browser
- Sagt Ihne ihre IP Adresse
- Zeigt Ihnen den Query-String an.
27Links
- http//java.sun.com/products/servlet/
- http//developer.java.sun.com/developer/technicalA
rticles/Servlets/ - http//java.sun.com/docs/books/tutorial/servlets/
- http//www.servlets.com/index.tea
- http//archive.coreservlets.com/
- http//www.oreilly.com/catalog/jservlet2/
- http//java.sun.com/j2ee/j2sdkee/
- http//java.sun.com/products/servlet/2.2/javadoc/
- http//www.ifi.unibas.ch/Courses/JavaTech/course/1
306Schaub/index.htm
28Environement Variablen
CGI-Variable
29CGI Variable
- AUTH_TYPE
- Art der Autentisation (basic oder digest)
- CONTENT_LENGTH
- Bytes mit post gesendet
- CONTENT_TYPE
- MIME Typ von anghängten Daten
- DOCUMENT_ROOT
- Wurzelverzeichnis des Webservers
- PATH_INFO
- Pfad ohne Query-String
- PATH_TRANSLATED
- wirklicher Pfad auf dem Server
- QUERY_STRING
- REMOTE_ADDR
- IP Adresse des Client
CGI-Variable
30CGI Variable
- REMOTE_HOST
- Domainname vom Host
- REMOTE_USER
- Username (nur bei Authentification)
- REQUEST_METHOD
- Get,Post,Put,...
- SCRIPT_NAME
- Pfad des Servlet
- SERVER_SOFTWARE
CGI-Variable
31Neues Servlet im JBuilder
32(No Transcript)
33(No Transcript)
34(No Transcript)