Ein Servlet ist eine Java-Klassendatei, die auf einem Web-Server läuft. Ein Servlet erweitert die Funktionalität des Servers ähnlich wie ein CGI-Programm in Perl oder PHP.
Ein Servlet nimmt GET- oder POST-Anfragen eines Client entgegen. Es verarbeitet dann auf dem Server die im QueryString enthaltenen Daten. Mehrere Servlets können untereinander kommunizieren. Als Output erzeugt ein Servlet Zeichenketten, die an den Client zurückgeschickt werden. Diese Zeichenketten sollten print-Befehle zur Erzeugung eines HTML-Dokument beim Client enthalten .
Servlets haben kein eigenes grafisches UserInterface
Servlets erfordern auf dem Server die Zusammenarbeit der folgenden Komponenten:
Zum Entwickeln von Servlets gibt es von Sun folgende APIs:
Ein Servlets wird von einem Client aufgerufen. Dabei besitzt das Servlet 2 Interfaces, über die es mit dem Client kommuniziert:
Aus Sicht des Client gibt es verschiedene Wege
ein Servlet aufzurufen. Der mehr oder weniger erfolgreiche
Aufruf kann nachvollzogen werden durch einen Blick in den Logfile
des Servers.
Die Eintragung in den Logfile bzgl. des Starts von SimpleServlet sieht so aus:
127.0.0.1 [27/Jun/2000] "GET /servlet/SimpleServlet HTTP/1.1" 200 250Die vorletzte Zahl sagt folgendes:
Nach dem ersten Aufruf läuft das Servlet weiter und muss daher bei erneuten Aufrufen nicht neu gestartet werden.
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*
Accept-Encoding: gzip, deflate
Accept-Language: de
Connection: Keep-Alive
Content-Length: 39
Content-Type: application/x-www-form-urlencoded
Cookie: 963733934540=meier; 963733946730=mueller
Extension: Security/Remote-Passphrase
Host: localhost
Referer: http://localhost/Servlet_Lektion1/src/ServletPost.html
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Ausser dem Header bietet HttpServletRequest Zugriff auf die
üblichen CGI-Variablen, insbesondere auf den QueryString
Alle Servlets implementieren das Interface Servlet. Das kleinstmögliche Servlet der Welt sieht also so aus: Servlet1.
Das Interface Servlet definiert die folgenden Methoden:
out.println("<html>");
den Aufbau der Antwort-Seite auf dem Server beginnen.
wird in der Praxis als Superklasse aller Servlets benutzt
Als Hauptmethoden ist eine der folgenden 3 Methoden zu benutzen, je nach dem ob das Servlet vom Client mit GET, POST oder mit beiden aufgerufen werden soll :
// implementiert das interface Servlet und sonst nichts
//
import javax.servlet.*;
public class Servlet1 implements Servlet
{
public void init(ServletConfig config)
{}
public ServletConfig getServletConfig()
{
ServletConfig SG = null;
return SG;
}
public java.lang.String getServletInfo()
{
return("Servlet1 implements Servlet");
}
public void service(ServletRequest req, ServletResponse res)
{}
public void destroy()
{}
}
/* Demo init
dieses Servlet schreibt folgende 3 Zeilen in den log-File:
[Tue Jul 11 11:02:31 GMT+02:00 2000] Init Parameters:
[Tue Jul 11 11:02:31 GMT+02:00 2000] ServletContext(auszugsweise):
[Tue Jul 11 11:02:31 GMT+02:00 2000] ServerInfo: Apache/1.3.12 (Win32) ServletExecAS/3.0
*/
import javax.servlet.*;
import java.util.Enumeration;
public class Servlet2 implements Servlet
{
public void init(ServletConfig config) throws ServletException
{
Enumeration IPN = config.getInitParameterNames();
System.out.println("Init Parameters:");
while (IPN.hasMoreElements())
{
String param = (String) IPN.nextElement();
System.out.println(" "+param+": "+config.getInitParameter(param));
}
ServletContext SC = config.getServletContext();
System.out.println("ServletContext(auszugsweise):");
System.out.println("ServerInfo: " + SC.getServerInfo());
}
public ServletConfig getServletConfig()
{
ServletConfig SG = null;
return SG;
}
public java.lang.String getServletInfo()
{
return("Erste Klasse Implementierung interface Servlet");
}
public void service(ServletRequest req, ServletResponse res)
throws ServletException,java.io.IOException
{}
public void destroy()
{}
}
/* Demo ServletRequest ServletResponse
Aufruf mit:
http://localhost/servlet/Servlet3?Anfrage=wasistdennhierlos
der Aufruf von
req.getParameterValues("Anfrage")
bringt einen Array der Client-Inputs
*/
import java.io.PrintWriter;
import javax.servlet.*;
public class Servlet3 implements Servlet
{
public void init(ServletConfig config) throws ServletException
{
}
public ServletConfig getServletConfig()
{
ServletConfig SG = null;
return SG;
}
public java.lang.String getServletInfo()
{
return("Erste Klasse Implementierung interface Servlet");
}
public void service(ServletRequest req, ServletResponse res)
throws ServletException,java.io.IOException
{
PrintWriter out;
String Anfrage;
res.setContentType("text/html");
out = res.getWriter ();
Anfrage = req.getParameterValues("Anfrage")[0];
out.println("<html>");
out.println("<head><title>Servlet3</title></head>");
out.println("<body>");
out.println("Die Anfrage war: " + Anfrage );
out.println("</body>\n</html>");
}
public void destroy()
{}
}
/* Demo GenericServlet
Aufruf mit:
http://localhost/servlet/ServletG1?Anfrage=wasistdennhierlos
*/
import java.io.PrintWriter;
import javax.servlet.*;
public class ServletG1 extends GenericServlet
{
public void service(ServletRequest req, ServletResponse res)
throws ServletException,java.io.IOException
{
PrintWriter out;
String Anfrage;
res.setContentType("text/html");
out = res.getWriter ();
Anfrage = req.getParameterValues("Anfrage")[0];
out.println("<html>");
out.println("<head><title>ServletG1</title></head>");
out.println("<body>");
out.println("Die Anfrage war: " + Anfrage );
out.println("</body>\n</html>");
}
}
<HTML> <head><title>FORM ACTION ruft ServletGet </title></head> <body> <FORM METHOD=GET ACTION="http://localhost/servlet/ServletGet" > Feld1: <br><input size=40 maxlength=40 name="Feld1"><br> Feld2: <br><textarea rows=5 cols=70 name="Feld2"></textarea><p> <INPUT TYPE=SUBMIT> </Form> <body> </HTML>
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletGet 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>");
out.println("<TITLE>doGet(HttpServletRequest, HttpServletResponse): ServletGet");
out.println("</TITLE></HEAD>");
out.println("<BODY>");
out.println("<h2 align=\"center\"><font color=\"#FF0000\">");
out.println("doGet: Methoden von interface HttpServletRequest");
out.println("</font></h2>");
out.println("getContentLength(): "+ req.getContentLength() +"<br>");
out.println("getCharacterEncoding(): "+ req.getCharacterEncoding() + "<br>");
out.println("getContentType(): "+ req.getContentType() + "<br>");
out.println("getMethod(): "+ req.getMethod() + "<br>");
out.println("getPathInfo(): "+ req.getPathInfo() + "<br>");
out.println("getPathTranslated(): "+ req.getPathTranslated() + "
");
out.println("getQueryString(): "+ req.getQueryString() + "
");
out.println("<br>\n");
Enumeration IPN = req.getParameterNames();
out.println("Init Parameter aus FORM INPUT:<br>\n");
while (IPN.hasMoreElements())
{
String param = (String) IPN.nextElement();
out.println(" "
+param
+": "
+req.getParameter(param)
+"<br>\n");
}
out.println("
\n");
Enumeration HN = req.getHeaderNames();
out.println("Header aus der Request:<br>\n");
while (HN.hasMoreElements())
{
String param = (String) HN.nextElement();
out.println(" "
+param
+": "
+req.getHeader(param)
+"<br>\n");
}
out.println("<br>\n");
out.println("getProtocol(): "+ req.getProtocol() + "<br>");
out.println("getRemoteAddr(): "+ req.getRemoteAddr() + "<br>");
out.println("getScheme(): "+ req.getScheme() + "<br>");
out.println("getServerName(): "+ req.getServerName() + "<br>");
out.println("getServerPort(): "+ req.getServerPort() + "<br>");
out.println("</BODY></HTML>");
}
}
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import klein.Klein;
public class ServletEA 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>");
out.println("<TITLE> Servlet ruft Methode einer Klasse");
out.println("</TITLE></HEAD>");
out.println("<BODY>");
out.println("<h1 align=\"center\"><font color=\"#Fedcba\">");
out.println("Eingabe Ausgabe");
out.println("</font></h1>");
out.println("<FORM METHOD=GET ACTION="
+ "\"http://localhost/Servlet_Lektion1/servlet/ServletEA\">");
out.println("Text-Eingabe:<P>");
out.println("<INPUT TYPE=TEXT NAME=Eing ><P>");
out.println("<INPUT TYPE=submit VALUE= \"machs klein\">");
String Eing = req.getQueryString();
if( Eing != null )
{
String Ausg = new Klein().klein( Eing );
out.println("<h2 align=\"center\"><font color=\"#abcdef\">");
out.println( Ausg );
out.println("</font></h2>");
}
out.println("</BODY></HTML>");
}
}
/* Demo Klein.java
Aufruf durch Servlet ServletEA
stellt eine Utility-Funktion klein( String ) bereit
*/
package klein;
public class Klein
{
public String klein( String Eing )
{
return Eing.toUpperCase();
}
}
nach oben