Java-Servlets

Werbung
Webprogrammierung
Servlets / JSP
20.07.10
Thomas Perschke
Rückblick




HTML / CSS
JavaScript / DHTML
PHP
AJAX
20.07.10
Heute

Servlets
20.07.10
Common Gateway Interface (CGI)






Definiert Methoden, wie ein Web-Server mit externen
Programmen kommunizieren kann
Eine der ersten praktisch eingesetzten Techniken zur
Erzeugung dynamischer Webseiten
Web-Server leitet Request an externes Programm
weiter
Ausgabe des externen Programms wird an Client
gesendet
CGI-Programme können nicht mit dem Web-Server
interagieren
CGI-Programme können in fast allen Sprachen erstellt
werden (Perl, C / C++, ...), da Kommunikation über
Standardkanäle
20.07.10
Java Servlets




Werden normalerweise in Verbindung mit einem WebServer bzw. einer Servlet-Engine benutzt
Java-Servlets laufen einer JVM auf dem Server ab
Servlets werden in separaten Threads innerhalb des
Server-Prozesses ausgeführt  gute Performance
Servlets sind Java-Klassen, deren Aufgabe es ist, eine
Antwort zu erzeugen
–
–
–
HTML-Seite
XML-Daten
...
20.07.10
Vorteile

portabel / mächtig / sicher
–

effizient
–
–
–

einmal geladen, verweilt das Servlet im Speicher
Threads anstelle von Prozessen
parallele Requests werden auf verschiedene Threads verteilt
(skalierbar)
elegant
–
–

durch Java (->API)
objektorientiert, modular
bereitgestellte Servlet-spezifische Methoden
Integration
–
–
komplett in den Server integriert
Austausch von Daten der Servlets untereinander
20.07.10
Technische Voraussetzungen

JDK
–

J2SDK
Servlet-Engine
–
–
–
Tomcat (Catalina)
Resin
JRun
20.07.10
Die Servlet-API

Servlets benutzen Klassen und Interfaces aus zwei
Packages:
–
–


javax.servlet
javax.servlet.http
Servlets haben i.A. keine main-Methode
Bestimmte Methoden des Servlets werden durch den
Web-Serveraufgerufen
–
–
Jeder Request wird an die service()-Methode des Servlets
übergeben
Bei den HTTP-Servlets erfolgt eine Vorverarbeitung und der
Request wird direkt an die doGet()- oder an die doPost()Methode übergeben (doXXX()-Methode)
20.07.10
Servlet-Hierarchie
20.07.10
Implementierung Test-Servlet (1. Schritt)

Neue Datei „TestServlet.java“ im Verzeichnis ‚resin-2.1.11/doc/test/WEBINF/classes‘ anlegen
Datei TestServlet.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyTestServlet extends HttpServlet {
...
}
20.07.10
Test-Servlet
20.07.10
Implementierung Test-Servlet (2. Schritt)
...
public class MyTestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
res) throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
...
}
}
20.07.10
Implementierung Test-Servlet (3. Schritt)
...
public class MyTestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head><title>Test</title></head>");
out.println("<body>");
out.println("Dies ist ein Test");
out.println("</body>");
out.println("</html>");
}
}
20.07.10
Deploying des TestServlets (4. Schritt)

Konfigurationsdatei webapps/test/web-inf/web.xml
–
Innerhalb des Bereichs <host>..</host>:
<web-app ...>
<servlet>
<servlet-name>MeinTestServlet</servlet-name>
<servlet-class>test.MyTestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MeinTestServlet</servlet-name>
<url-pattern>/ts</url-pattern>
</servlet-mapping>
</web-app>

Aufruf im IE: http://localhost:8080/test/ts
20.07.10
Form-Daten auswerten
<html>
<head><title>Test-Form</title></head>
<body>
<form method=„get“ action=„/test/ts“>
Wie ist ihr Name?
<input type=„text“ name=„name“><p>
Wie ist ihr Vorname?
<input type=„text“ name=„vorname“><p>
<input type=„submit“>
</form>
</body>
</html>
20.07.10
Form-Daten auswerten
public void doGet(HttpServletRequest request, HttpServletResponse
res) throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
String name = request.getParameter("name");
String vorname = request.getParameter("vorname");
out.println("<html>");
out.println("<head><title>Test</title></head>");
out.println("<body>");
out.println("Ihr Name lautet " + vorname + " " + name + "!");
out.println("</body>");
out.println("</html>");
20.07.10
Form-Daten auswerten mit POST
<form method="get" action="/test/ts">
<form method=„post" action="/test/ts">
TestServlet.java:
...
public void doPost(HttpServletRequest request, HttpServletResponse res)
throws ServletException, IOException {
doGet(request, res);
}
...
20.07.10
Einfacher Seitenzähler
Datei MyTestServlet.java:
public class MyTestServlet extends HttpServlet {
public static int counter = 0;
...
public void doPost(HttpServletRequest request, HttpServletResponse res) throws
ServletException, IOException {
...
out.println("Ihr Name lautet " + vorname + " " + name + "!");
out.println("<p>Die Seite wurde " + ++counter + " mal aufgerufen");
out.println("</body>");
...
}
...
20.07.10
Server-/Client-Informationen auswerten
–
–
–
–
–
–
–
–
–
request.getServerName()
request.getServerPort()
request.getMethod()
request.getRequestURI()
request.getProtocol()
request.getServletPath()
request.getRemoteAddr()
request.getRemoteHost()
request.getRemoteUser()
20.07.10
Herunterladen