Java - Webapplikationen Bestandteile (HTTP,, JSP) Aufbau (Model View Controller) Datenverwaltung (Java Beans, Sessions) Entwicklung (Projektstruktur, Sysdeoplugin für Eclipse) 17. Januar 2006 Jan Hatje JAVA-Webapplikationen 1
HyperText Transfer Protocol (HTTP) HTTP dient der Kommunikation zwischen Webserver und Webbrowser HTTP ist ein zustandsloses Protokoll Request Methoden 1) GET: Standardmethode, Parameter werden an die URL angehängt 2) POST: Für grössere Datenmengen, Parameter befinden sich im Requestbody Response (HTML, Dateien) Client (Browser) Request (GET oder POST) Server (Webserver) Response (HTML) Verbindungsabbau JAVA-Webapplikationen 2
Webserver Apache Tomcat Sun veröffentlicht nur die Spezifikation für Webserver Apache implementiert diese mit Tomcat Client z.b. Browser Request Response Webserver z.b. Apache (statische Inhalte) dynamische Inhalte container z.b. Tomcat (entsprechende s werden aufgerufen und die Ausgabe zurückgegeben) Fordert der Client dynamische Inhalte an, leitet der Webserver die Anfrage an den container weiter Tomcat kann auch selbständig arbeiten, wird aber meist zusammen mit einem Webserver eingesetzt JAVA-Webapplikationen 3
s s sind vollstänig in Java implementiert Sie werden auf dem Server abgearbeitet Der Client sieht nur HTML (Benötigt keine JRE) CGI + Geschwindigkeit, für jede Anfrage wird nur ein Thread erzeugt. + Einfache Kommunikation zwischen Objekten (z. B. Datenbankanbindung kann geteilt werden) Nur Java möglich Geschwindigkeit, für jede Anfrage wird ein extra Prozess erzeugt. Aufwendige Kommunikation zwischen Objekten + CGI ist eine Schnittstelle große Auswahl an Sprachen JAVA-Webapplikationen 4
s Codebeispiel public class MyClass extends Http { public void doget (HttpRequest req, HttpResponse res) { muss von der Klasse Http abgeleitet werden. In doget werden Client Anfragen vom Typ GET verarbeitet. PrintWriter out = res.getwriter(); out.println("<html><body>"); out.println("<h1>output</h1>"); if (req.getparameter("param1")!= null) { var1 = req.getparameter("param1"); Objekte HttpRequest und HttpResponse bieten Informationen über die Anfrage bzw Mechanismen für die Antwort. Methode getwriter() von HttpResponse schreibt die Antwort für den Client. public void dopost (HttpRequest req, HttpResponse res) { Methode getparameter() bietet Zugriff auf die vom Client gesendeten Parameter. JAVA-Webapplikationen 5
JSP (Java Server Pages) s sind aufwendig, da sie auch statische Inhalte ausgeben JSP trennen dynamischen und statischen Teil: HTML (statische Elemente) Java (Logik und dynamische Inhalte) JSP spezifische Elemente (Arbeitserleichterung) JSP werden vom JSP-Compiler in ein umgewandelt 1. Client fordert eine JSP an 2. Server wandelt die JSP, wenn sie erstmals aufgerufen wurde 3. Server führt das generierte aus und antwortet dem Client JAVA-Webapplikationen 6
JSP Codebeispiel <body><html> <%@ page import = "java.util.*" %> <%@ page include file = "url" %> Hallo <%= username %> Time: <%= new Date() %> <% int param1 = 0; if (param1 == request.getparameter("param2") { out.println( "Alles ok" ); else %> <%-- Kommentar --> <jsp:forward page="nextpage.jsp"/> </body></html> HTML-Tags Direktiven:Anweisungen für das globale Dokument Ausdrücke: Variable oder Rückgabewert einer Methode wird in Ausgabestrom geschrieben Skriptlets: beliebiger Javacode. Request (httprequest) Response (httprersponse) Kommentar in einer JSP Aktionen: starten spezielle JSP- Funktionalitäten. JAVA-Webapplikationen 7
MVC - Modell s und JSP werden schnell unübersichtlich Wiederverwendbarkeit von Projektteilen ist schwierig Ein Projekt sollte in drei Einheiten getrennt werden: Model (Daten der Anwendung) View (Repräsentation der Daten) Controller (Verarbeitung der Daten, Aufruf von Views) View Controller update Model JAVA-Webapplikationen 8
MVC 2 - Modell Dispatcher Controller request Javaklasse oder response JSP Java Bean View Model JAVA-Webapplikationen 9
Java Bean JSP Java Bean public class UserDataBean { private String username = new String(); <body><html> <jsp:usebean id="userdata" class="myproject.userdatabean" /> Hello <jsp:getproperty name="userdata" property="username" /> <form> <input name="username" type="text"> <input name="status" type="text"> </form> <jsp:setproperty name="userdata" property="*"/> private int status = 0; public String getusername() { return username; public void setusername(string username) { this.username = username; public int getstatus() { return status; public void setstatus(string status) { this.status = status; </body></html> JAVA-Webapplikationen 10
Session Daten können nicht über mehrere Anfragen gespeichert werden, da HTTP zustandslos ist Sessions müssen indirekt angelegt werden: Eine Session wird über eine ID in einem Cookie identifiziert Clientanfragen können einem bestimmten Nutzer zugeordnet werden Objekten werden Attribute zugeordnet, über die sie identifiziert werden <% MyProject.UserData udat = (MyProject.UserData)session.getAttribute( "userdata"); %> JSP <%= udat.printaddress() %> HttpSession ses = requ.getsession(true); UserData udat = (UserData) ses.getattribute("userdata"); if(udat == null) { udat = new UserData(); ses.setattribute("userdata", udat); JAVA-Webapplikationen 11
Sysdeo - Eclipseplugin Tomcat kann direkt über Eclipse gesteuert werden. Projekttyp Java Tomcat Projekt Eclipsedebugger steht zur Verfügung Projektexport in *.war Dateien Automatische Anpassung von server.xml (Eclipse Workspace kann benutzt werden) JAVA-Webapplikationen 12
Tomcat Projekt - Struktur Allgemeine Klassendateien von Tomcat für s und JSP Hier befindet sich die normalen Java- Klassen und diejenigen für die s Die vom JSP-Compiler generierten s *.jar-dateien, die für das Projekt benötigt werden web.xml ordnet jedem eine URL zu, über die es aufgerufen wird JSP, HTML, -Dateien können im Projektverzeichnis beliebig angeordnet werden JAVA-Webapplikationen 13