JAVA - Eigenschaften

Werbung
Dynamische Webseiten
CGI & co
CGI - Lösung für alle ?

Ja





Nein


CGI kann alles tun, was man für Anwendungen braucht
flexibel (beliebige Programmiersprache,...)
einfach
portabel
Performance
Ablauf




Webserver erkennt, daß Programm aufgerufen werden soll
erzeugt neuen Prozeß (ggf. mit Skript Interpreter)
dieser läuft ab
und terminiert
© [email protected]
Lösungen

1) Programme als Module in Webserver gelinkt





2) Webserver mit eingebautem Skript-Interpreter





Apache modules, nsapi, IIS dll
Performance sehr gut
Portabilität/Flexibilität weg
Aufwendige Programmierung (APIs,...)
z.B. Perl, PHP, ASP, OWAS (?), ...
Portabilität/Flexibilität eingeschränkt
Performance gut
einfache Programmierung
3) Servlets/JSP


im Prinzip wie 1)
kombiniert Vorteile von beiden
© [email protected]
Architektur
Browser
Webserver
ServletEngine
Servlet
Servlet
Servlet
Servlet
Browser
ServletEngine mit
eingebautem
Webserver
Servlet
Servlet
Servlet
Servlet
© [email protected]
Servlet Engines

Java Webserver (SUN)


Websphere (IBM)





Apache module + Servlet Engine
Tomcat (Apache)



Application Server
komplex
Load Balancing
....
Jserv (Apache)


Referenzimplementierung
standalone oder Apache module
einfach und schnell
und viele andere
© [email protected]
Servlet

javax.servlet


javax.servlet.http


generisch
http
Java Klasse





abgeleitet von HttpServlet
keine main() Methode
Überschreiben von doGet() und/oder doPost()
ServletRequest
 Parameter, input Stream
ServletResponse
 Session, outputStream
© [email protected]
Lebenszyklus eines Servlets

Servlet wird vom Anwender kompiliert

beim ersten Aufruf von der engine geladen


bei jedem weiteren Aufruf wird nur die
entsprechende Methode ausgeführt





Klasse wird dynamisch geladen
genauer: ausgeführt wird service()
die doHeader() ... ausführt und je nach Methode
doGet() oder
doPost()
kaum Overhead
© [email protected]
Hello World

mit GET
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// Was liefern wir zurueck ?
// Hier: ASCII Text, kein HTML
response.setContentType("text/plain");
// Output liefern wir ueber "normale" Java IO
PrintWriter pw = response.getWriter();
pw.println("Hello World");
pw.close();
}
}
© [email protected]
Hello World

mit POST
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// Was liefern wir zurueck ?
// Hier: ASCII Text, kein HTML
response.setContentType("text/plain");
// Output liefern wir ueber "normale" Java IO
PrintWriter pw = response.getWriter();
pw.println("Hello World");
pw.close();
}
}
© [email protected]
Hello World

beide ?
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// Was liefern wir zurueck ?
// Hier: ASCII Text, kein HTML
response.setContentType("text/plain");
// Output liefern wir ueber "normale" Java IO
PrintWriter pw = response.getWriter();
pw.println("Hello World");
pw.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request,response);
}
© [email protected]
}
Initialisierung

Zur Initialisierung kann die init-Methode
überschrieben werden
public void init(ServletConfig conf)
throws ServletException {
super.init(conf);
count = 0;
}

z.B. Verbindung zur DB herstellen




evtl. schlechte Idee (Fehlerbehandlung)
Verbindungen zu factories,... aufsetzen
Konfigurationsinformationen lesen
...
© [email protected]
Parameter

HttpServletRequest.getParameter(name)
String par = request.getParameter("ID");

liefert den Wert des Parameters (hier ID) als String

bei GET und POST

Problem: Parameter mit Sonderzeichen

Lösung: URL-encoding

z.B. ' ' (blank) als +
© [email protected]
Session

Wie werden Informationen von einer Seite zur
anderen transportiert ?

etwa Benutzername, DB Verbindung,...

z.B. Cookies, URL-rewriting,... manuell

oder automatisch: Session Objekt



HttpServletRequest.getSession() liefert HttpSession
Methoden
 getAttribute(name)/setAttribute(name,Wert)
liefert/setzt beliebiges Object
 cast nötig
HttpSession session = request.getSession();
count =(Integer)session.getAttribute("COUNT");
© [email protected]
Herunterladen