Praxis der Internet-Programmierung
Servlet I
Statische Webseiten
1:1-Ausgabe der angeforderten Datei
Dynamische Komponenten auf der Client-Seite: Scripts (ECMAScript,
JavaScript,…)Plug-Ins (Java Applets,
Macromedia Flash, …)
Dynamische Webseiten
Erzeugung der Ausgabe zur Laufzeit
"Web-Anwendung",
Server-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
Server-seitige Technologien
Server-seitige Skripte
Serverside JavaScript SSJS (Netscape)Active ServerPages ASP (Microsoft)Hypertext Preprocessor PHP (Apache)JavaServer Pages JSP (Sun)
Bsp: ASP
<HTML> <!-- This example displays the content of several ServerVariables. --> ALL_HTTP server variable = <%= Request.ServerVariables("ALL_HTTP") %> <BR> CONTENT_LENGTH server variable = <%= Request.ServerVariables("CONTENT_LENGTH") %> <BR> CONTENT_TYPE server variable = <%= Request.ServerVariables("CONTENT_TYPE") %> <BR> QUERY_STRING server variable = <%= Request.ServerVariables("QUERY_STRING") %> <BR> SERVER_SOFTWARE server variable = <%= Request.ServerVariables("SERVER_SOFTWARE") %> <BR> </HTML>
Java Servlet Framework
JSEE 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
stabil
Servlets die Antwort auf CGI Programmierung
Servlets laufen auf einem Webserver in einem Servletcontainer.
Aufgaben:Zugriff auf REQUESTErzeugen einer Antwort Formatierung der Antwort in
einem DokumentSenden des RESPONSE
kein eigenständiges Programm! keine main()-Methode!
VorteileAlle Servlets können in einer JVM laufen
Erleichtert die KommunikationPortabilität / Stabilität / PlatformunabhängikeitSicherheitnur eine Sprache Funktionalität durch Methodenaufrufe auf das
Servlet Objekt
Servlet bleibt im Speicher erhaltenSchnellem Starten bei einem neuen Requestwenig Memory overhead
javax.servlet
C:\Programme\jbuilder5\extras\jakarta-tomcat-src\src\webpages\docs\api
Lebenszyklus 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
Programmierung eines Servlets• erweitern die abstract class javax.servlet.http.HttpServlet (Subklasse von GenericServlet)
• service() wird nicht überschrieben• überschreiben der Methoden doGet(), doPost(), doPut(), doDelete()
HELLO WORLDpackage 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("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
}
}
Zugriff auf REQUEST
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Interface HttpServletRequestgetParameter()/getParametetValues():
Zugriff auf die Name/Wert-Paare des REQUESTS
getRemoteAddr(): IP-Adresse des Clients
getProtocol(): benutztes Protokol
HttpServletRequest API
Zugriff 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,…
Hello IIpackage 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("<HTML>");
out.println("<HEAD><TITLE>Hello, " + name + "</TITLE></HEAD>");
out.println("<BODY>");
out.println("Hello, " + name);
out.println("</BODY></HTML>");
}
}
Hello World Form
<HTML>
<HEAD>
<TITLE>Introductions</TITLE>
</HEAD>
<BODY>
<FORM METHOD=GET ACTION="/servlet/hello_world.Hello">
If you don't mind me asking, what is your name?
<INPUT TYPE=TEXT NAME="name"><P>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>
Request Headers IE 5.5
Request Headers Netscape 6.0
HTTP 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);
}
HTTP 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(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<B>Request Method: </B>" +
request.getMethod() + "<BR>\n" +
"<B>Request URI: </B>" +
request.getRequestURI() + "<BR>\n" +
"<B>Request Protocol: </B>" +
HTTP Request Header
request.getProtocol() + "<BR><BR>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Header Name<TH>Header Value");
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
out.println("<TR><TD>" + headerName);
out.println(" <TD>" + request.getHeader(headerName));
}
out.println("</TABLE>\n</BODY></HTML>");
}
HTTP 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() {
}
}
Praktikum
SERVLET Programmierung I
1. Hello World Servlet2. 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.
Links
http://java.sun.com/products/servlet/
http://developer.java.sun.com/developer/technicalArticles/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/1306Schaub/index.htm
Environement VariablenCGI-Variable
CGI Variable
AUTH_TYPEArt der Autentisation
(basic oder digest)
CONTENT_LENGTH# Bytes mit post
gesendet
CONTENT_TYPEMIME Typ von
anghängten Daten
DOCUMENT_ROOTWurzelverzeichnis des
Webservers
PATH_INFOPfad ohne Query-
String
PATH_TRANSLATEDwirklicher Pfad auf
dem Server
QUERY_STRING
REMOTE_ADDR IP Adresse des ClientC
GI-Variable
CGI Variable
REMOTE_HOSTDomainname vom Host
REMOTE_USERUsername (nur bei Authentification)
REQUEST_METHODGet,Post,Put,...
SCRIPT_NAMEPfad des Servlet
SERVER_SOFTWARE
CGI-Variable
New
Neues Servlet im JBuilder
Servlet
Rechte Maustaste
Web Run