Java - Webapplikationen ● Bestandteile (HTTP, Servlet, 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 Servletcontainer z.B. Tomcat (entsprechende Servlets werden aufgerufen und die Ausgabe zurückgegeben) Fordert der Client dynamische Inhalte an, leitet der Webserver die Anfrage an den Servletcontainer weiter ● Tomcat kann auch selbständig arbeiten, wird aber meist zusammen mit einem Webserver eingesetzt ● JAVA-Webapplikationen 3 Servlets ● Servlets sind vollstänig in Java implementiert ● Sie werden auf dem Server abgearbeitet ● Der Client “sieht” nur HTML (Benötigt keine JRE) Servlet CGI + Geschwindigkeit, für jede Anfrage wird nur ein Thread erzeugt. – Geschwindigkeit, für jede Anfrage wird ein extra Prozess erzeugt. + Einfache Kommunikation zwischen Objekten (z. B. Datenbankanbindung kann geteilt werden) – Aufwendige Kommunikation zwischen Objekten – Nur Java möglich + CGI ist eine Schnittstelle → große Auswahl an Sprachen JAVA-Webapplikationen 4 Servlets Codebeispiel public class MyClass extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) { ... PrintWriter out = res.getWriter(); out.println("<HTML><BODY>"); out.println("<H1>Output</H1>"); ... if (req.getParameter("param1") != null) { var1 = req.getParameter("param1"); } ... } public void doPost (HttpServletRequest req, HttpServletResponse res) { ... } } JAVA-Webapplikationen Servlet muss von der Klasse “HttpServlet” abgeleitet werden. In “doGet” werden Client Anfragen vom Typ GET verarbeitet. Objekte “HttpServletRequest” und “HttpServletResponse” bieten Informationen über die Anfrage bzw Mechanismen für die Antwort. Methode “getWriter()” von “HttpServletResponse” schreibt die Antwort für den Client. Methode “getParameter(...)” bietet Zugriff auf die vom Client gesendeten Parameter. 5 JSP (Java Server Pages) Servlets 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 Servlet umgewandelt 1. Client fordert eine JSP an 2. Server wandelt die JSP, wenn sie erstmals aufgerufen wurde 3. Server führt das generierte Servlet 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 ... 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 (httpServletRequest) Response (httpServletRersponse) %> <%-- Kommentar --> <jsp:forward page="nextPage.jsp"/> </body></html> JAVA-Webapplikationen Kommentar in einer JSP Aktionen: starten spezielle JSPFunktionalitäten. 7 MVC - Modell ● Servlets 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 update JAVA-Webapplikationen Controller Model 8 MVC 2 - Modell Dispatcher request Controller Servlet Servlet Servlet Servlet Javaklasse oder Servlet response Servlet Servlet Servlet JSP Servlet Servlet Servlet Java Bean View Model JAVA-Webapplikationen 9 Java Bean JSP Java Bean public class UserDataBean { private String userName = new String(); private int status = 0; <body><html> ... <jsp:useBean id="userData" class="MyProject.UserDataBean" /> public String getUserName() { return userName; } Hello <jsp:getProperty name="userData" property="userName" /> public void setUserName(String userName) { this.userName = userName; } <form> public int getStatus() { return status; } ... <input name="userName" type="text"> <input name="status" type="text"> public void setStatus(String status) { this.status = status; } </form> <jsp:setProperty name="userData" property="*"/> ... </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 JSP Servlet <% MyProject.UserData udat = (MyProject.UserData)session.getAttribute( "userData"); %> ... <%= udat.printAddress() %> JAVA-Webapplikationen HttpSession ses = requ.getSession(true); UserData udat = (UserData) ses.getAttribute("userData"); if(udat == null) { udat = new UserData(); ses.setAttribute("userData", udat); } 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 Servlets und JSP Hier befindet sich die “normalen” JavaKlassen und diejenigen für die Servlets Die vom JSP-Compiler generierten Servlets *.jar-Dateien, die für das Projekt benötigt werden “web.xml” ordnet jedem Servlet eine URL zu, über die es aufgerufen wird JSP, HTML, ... -Dateien können im Projektverzeichnis beliebig angeordnet werden JAVA-Webapplikationen 13