Vorteile von Webapplikationen über einen Applikationsserver:
Webanwendungen werden typischerweise in drei Schichten realisiert (3-Tier):
Weiteres zu Applikationsservern finden Sie unter techdocs/applicationserver.htm.
Die wichtigsten Technologien zur Erzeugung dynamischer Webseiten (meistens mit Datenbankanbindung):
CGI Perl |
Per CGI-Schnittstelle (Common Gateway Interface) aufgerufene Perl-Skripte (Practical Extraction and Report Language). Breite Unterstützung und gut geeignet für kleine Anwendung. |
PHP LAMP |
PHP (PHP Hypertext Preprocessor) bietet mehr Geschwindigkeit, komfortablere Bibliotheken und wesentlich bessere Möglichkeiten zur Datenbankanbindung.
Besonders verbreitet in der LAMP-Kombination (Linux-Apache-MySQL-PHP). Schwächen: sehr spezialisierte Sprache, eingeschränkte Kommunikation mit anderen Applikationen, schwieriges Debugging und nicht-requestgetriebe Hintergrundprozesse umständlich. |
ASP.NET | ASP.NET (Active Server Pages) macht fast nur mit dem Microsoft Internet Information Server (IIS) unter Windows Sinn. Ist im Microsoft-Umfeld sehr leistungsfähig, aber wenig bis gar nicht portabel und bedeutet große Abhängigkeit von dem einen Hersteller Microsoft. |
JSP | JSP (JavaServer Pages) hat viele Ähnlichkeiten zu ASP und bietet vergleichbare Features. Auch bei JSP besteht der Code aus normalem HTML-Code mit eingebetteten durch "<% ... %>" abgetrennten Code-Snippets (Schnipseln). Bei JSP enthalten diese Snippets Java-Code. Der gesamte Java-Sprachumfang samt Bibliotheken, JavaBeans- und EJB-Komponenten, guter Netzwerkfähigkeit sowie komfortabler und schneller Datenbankanbindung steht zur Verfügung. Standardisierung erleichtert Skalierung und Verteilung. JSP-Anwendungen laufen unverändert z.B. sowohl unter Linux + Apache als auch Windows + IIS sowie auf beliebigen Web Application Servern. Java ist besonders bei den großen Software-Herstellern (wie IBM, Sun, Oracle, SAP®) zur bevorzugten Programmiersprache geworden. |
Weiteres zu Technologien für dynamische Webseiten finden Sie unter techdocs/webanwendungen.htm und techdocs/db-web.htm.
Einige wichtige Java-Begriffe, -Plattformen und -Programmarten:
Java ME (Java Micro Edition) Java SE (Java Standard Edition) Java EE (Java Enterprise Edition) |
Die drei Java-Plattformen. Siehe auch Java ME, Java SE und Java EE. |
JVM (Java Virtual Machine) JRE (Java Runtime Environment) JDK (Java Development Kit) SDK (Software Development Kit) |
Die Bestandteile des Java SE JDK: Die JVM führt den Bytecode aus und stellt die Verbindungsschicht zum Betriebssystem und zur Hardware dar. Das JRE beinhaltet die JVM und fügt Laufzeitbibliotheken hinzu, z.B. Core APIs (Lang, Util, ...), Integration APIs und UI Toolkits (AWT, Swing, Sound, ...). JDK ist ein anderer Name für das SDK. Das JDK beinhaltet das JRE und fügt Entwicklungswerkzeuge hinzu, z.B. Java-Compiler, Debugging, ... Siehe auch http://www.oracle.com/technetwork/java/javase/tech. |
.java .class .jar .jsp |
.java ist die Dateiendung für Java-Sourcecodedateien. .class-Dateien beinhalten den Java-Bytecode nach dem Compilieren. .jar-Dateien fassen mehrere .class- und Ressourcendateien zusammen. Bei korrekter Konfiguration sind .jar-Dateien direkt per Mausklick ausführbar (wie .exe-Dateien). .jsp-Dateien sind serverseitige JSP-Dateien (JavaServer Pages). |
Textbasierte Kommandozeilenanwendung |
Einfache Konsolenprogramme. Siehe Programmierbeispiel techdocs/java-examples.htm#Beispiel-KommandozeilenApplikation. |
Grafisches Stand-alone-Programm AWT (Abstract Window Toolkit) Swing (Teil von JFC) SWT (Standard Widget Toolkit) Java 2D / 3D |
AWT ist bereits mit Java Version 1.1 verfügbar. Einige PDAs unterstützen nur diese Java-Version.
AWT verwendet vorwiegend die Dialoge des Betriebssystems. AWT ist schnell, aber bietet wenige Möglichkeiten. Swing ist im Java 2, also ab Java Version 1.2, enthalten. Bei Swing werden Dialogelemente selbst gezeichnet. Swing ist langsamer, aber komfortabler und sehr umfangreich. SWT wurde von IBM für Eclipse eingeführt. SWT ist schnell und mächtig, aber hardwareabhängig. Swing und SWT haben den Fokus auf grafischen Dialoganwendungen (GUI, graphical user interface), siehe Programmierbeispiele unter techdocs/java-examples.htm#Beispiel-GrafischeApplikation. Für grafische Anwendungen, die selbst Grafiken erstellen, wird AWT und Java 2D / 3D verwendet, siehe Programmierbeispiele unter techdocs/java-img.htm#ProgrammierbeispielAppletAWT. |
Applet, Midlet |
Applets und Midlets werden beim Client ausgeführt. Nur der Client benötigt ein JRE, der Server nicht. Java-Applets werden in den üblichen PC-Webbrowsern ausgeführt. Midlets sind vergleichbare Elemente, aber für MIDP-fähige Smartphones. Applet-Programmierbeispiele finden Sie unter techdocs/java-examples.htm#Beispiel-Applet-HTML und techdocs/java-img.htm#ProgrammierbeispielAppletAWT. |
JSP (JavaServer Pages) Servlet |
Anders als bei Applets und Midlets benötigt bei JSP nur der Server eine JRE, der Client nicht, er erhält HTML-Webseiten. Siehe techdocs/JSP. |
JavaBean |
Einfache Java-Komponente, oft mit GUI. Siehe techdocs/java-basics.htm#JavaBean. |
EJB (Enterprise JavaBean) |
Verteilte Komponente in spezieller Laufzeitumgebung (Java-EE-Container), immer ohne GUI. Siehe techdocs/jee-ejb2.htm. |
Mobile Java Embedded Java Card Java |
Siehe http://www.oracle.com/technetwork/java/javame/overview. |
Java-EE-Applikationsserver | Webserver z.B. | Bemerkung |
Apache Tomcat (JSP Referenz-Implementation) jakarta.apache.org/tomcat, jsp-install.htm |
Tomcat, Apache, IIS | Nur JSP, kein EJB; Open Source, frei verfügbar |
Mort Bay Jetty jetty.mortbay.org |
Jetty (und andere) | Nur JSP, kein EJB; Open Source, frei verfügbar |
JBoss (mit Jetty oder Tomcat) www.jboss.org, jee-ejb2.htm |
JBoss | inkl. EJB; Open Source, frei verfügbar (LGPL) |
Oracle WebLogic Application Server www.oracle.com/technology/products/weblogic |
WebLogic, Apache, IIS | kommerziell |
IBM WebSphere Application Server www.ibm.com/software/webservers/appserv |
IBM/Apache, IIS | kommerziell |
Oracle Application Server www.oracle.com/ip/deploy/ias |
Oracle | kommerziell |
<html> <head> <title> Meine erste JSP </title> </head> <body> <h1> Meine erste JSP </h1> <% // beliebiger Java-Code ... out.println( "Hallo" ); %> <%= request.getRemoteHost() %> ... </body> </html> |
HTML: <html>...</html> schließt das gesamte HTML-Dokument ein. <head>...</head> schließt den Header ein. <body>...</body> schließt den Hauptteil ein. (Erläuterungen siehe techdocs/html.htm.) JSP: <%... ... %> und <jsp:... .../> schließen Java-Code und JSP-Kommandos ein. Auch externe Dateien können eingebunden werden (per 'include'). (Erläuterungen siehe techdocs/jsp-grundlagen.htm.) |
Installieren Sie Tomcat (siehe oben) und starten Sie Tomcat.
Speichern Sie den JSP-Code in eine Datei mit dem Namen 'MeineJSP1.jsp' in Ihrem '.../Tomcat/webapps/ROOT'-Verzeichnis.
Geben Sie im Webbrowser ein: 'http://localhost/MeineJSP1.jsp' (falls Sie einen anderen HTTP-Port als 80 eingestellt haben, müssen Sie die Portnummer einfügen, z.B. so: 'http://localhost:8080/MeineJSP1.jsp').
Geben Sie von einem anderen vernetzten Rechner aus als URL im Webbrowser ein: 'http://<TomcatServerIPAdresseOderComputername>/MeineJSP1.jsp' (z.B. 'http://192.168.0.55/MeineJSP1.jsp').
Das folgende Programmierbeispiel soll in einem HTML-Formular die Verbindungsdaten zu einer Datenbank erfragen und dann per JSP-Datei eine Tabelle aus dieser Datenbank als HTML-Tabelle darstellen.
Benötigt werden also zwei Dateien:
- Die HTML-Datei 'DbTabelleLesen.htm' enthält das HTML-Formular.
- Die JSP-Datei 'DbTabelleLesen.jsp' nimmt die Verbindungsdaten vom HTML-Formular entgegen,
stellt eine Verbindung zur Datenbank her, liest die Datenbanktabelle aus
und erzeugt den HTML-Code für die HTML-Tabelle, der zur Darstellung an den Webbrowser geschickt wird.
Speichern Sie den folgenden HTML-Code in der Datei 'DbTabelleLesen.htm' im Verzeichnis '.../Tomcat/webapps/ROOT'. Bitte beachten: Diese HTML-Datei hat die Dateiendung '.htm', während die im '<form>'-Tag beim 'action'-Attribut eingetragene Datei die Dateiendung '.jsp' hat.
<html> <body> <form method="post" action="DbTabelleLesen.jsp"><pre> Db-Treiber <input size=60 type="text" name="prmDbDrv" value='org.hsqldb.jdbcDriver'><br> Db-URL <input size=60 type="text" name="prmDbUrl" value='jdbc:hsqldb:file:C:/hSqlDbData/myDB'><br> Benutzer <input size=60 type="text" name="prmUsr" value='sa'><br> Kennwort <input size=60 type="password" name="prmPwd" value=''><br> Tabellenname <input size=60 type="text" name="prmTab" value=''><br> SQL-Kommando <input size=60 type="text" name="prmSql" value=''> (optional)<br> <input type="submit" name="submit" value="Datenbanktabelle anzeigen"> </pre></form> </body> </html>
Speichern Sie den folgenden JSP-Code in der Datei 'DbTabelleLesen.jsp' im Verzeichnis
'.../Tomcat/webapps/ROOT':
<html> <body> <%@ page import="java.sql.*" isThreadSafe="false" %> <% String sDbDrv = request.getParameter( "prmDbDrv" ); String sDbUrl = request.getParameter( "prmDbUrl" ); String sUsr = request.getParameter( "prmUsr" ); String sPwd = request.getParameter( "prmPwd" ); String sTable = request.getParameter( "prmTab" ); String sSql = request.getParameter( "prmSql" ); if( null != sTable && 0 < sTable.length() && (null == sSql || 0 == sSql.length()) ) sSql = "SELECT * FROM " + sTable; if( null == sDbDrv || 0 >= sDbDrv.length() || null == sDbUrl || 0 >= sDbUrl.length() || null == sSql || 0 >= sSql.length() ) { out.println( "<br>Fehler: Mindestens Db-Treiber und Db-URL " + "sowie entweder Tabellenname oder SQL-Kommando " + "müssen ausgefüllt werden!<br>" ); } else { out.println( sSql + "<br><br>" ); Connection cn = null; Statement st = null; ResultSet rs = null; try { Class.forName( sDbDrv ); cn = DriverManager.getConnection( sDbUrl, sUsr, sPwd ); st = cn.createStatement(); rs = st.executeQuery( sSql ); ResultSetMetaData rsmd = rs.getMetaData(); int n = rsmd.getColumnCount(); out.println( "<table border=1 cellspacing=0><tr>" ); for( int i=1; i<=n; i++ ) // Achtung: erste Spalte mit 1 statt 0 out.println( "<th>" + rsmd.getColumnName( i ) + "</th>" ); while( rs.next() ) { out.println( "</tr><tr>" ); for( int i=1; i<=n; i++ ) // Achtung: erste Spalte mit 1 statt 0 out.println( "<td>" + rs.getString( i ) + "</td>" ); } out.println( "</tr></table>" ); } finally { try { if( null != rs ) rs.close(); } catch( Exception ex ) {/*ok*/} try { if( null != st ) st.close(); } catch( Exception ex ) {/*ok*/} try { if( null != cn ) cn.close(); } catch( Exception ex ) {/*ok*/} } } %> <br><a href="DbTabelleLesen.htm">Zurück zum Eingabeformular</a> </body> </html>
Im HTML-Formular wird für den Db-Treiber 'org.hsqldb.jdbcDriver' und für die Db-URL 'jdbc:hsqldb:file:C:/hSqlDbData/myDB' vorgeschlagen. Diese Vorgaben können Sie durch die für Ihre Datenbank passenden Texte ersetzen und so zur Laufzeit auf unterschiedliche Datenbanken umschalten. Unter techdocs/java-sql.htm#JDBC finden Sie die entsprechenden Einträge für verschiedene SQL-Datenbanken.
Können Sie auf keine bereits installierte Datenbank zugreifen, können Sie die vorgeschlagenen Vorgabewerte so lassen.
Sie setzen eine installierte hSqlDb-Datenbank voraus.
Deren Installation ist sehr einfach:
- Beenden Sie Tomcat
- Kopieren Sie die Datei 'hsqldb.jar' in das Verzeichnis
'%JAVA_HOME%/jre/lib/ext'
- Erzeugen Sie das Datenverzeichnis
'C:\hSqlDbData'
- Erzeugen Sie in diesem Datenverzeichnis die Datenbank 'myDB' mit einer ersten Testtabelle (z.B. 'xx')
Diese Schritte sind genauer unter
techdocs/java-sql.htm#hSqlDb beschrieben.
Starten Sie Tomcat und starten Sie die Anwendung im Webbrowser mit der Eingabe der URL
'http://localhost/DbTabelleLesen.htm' bzw.
'http://localhost:8080/DbTabelleLesen.htm'
bzw. von einem anderen Rechner aus mit
'http://<TomcatServerIPAdresseOderComputername>:<PortNr>/DbTabelleLesen.htm'.
Geben Sie gültige Datenbankzugangsdaten und einen gültigen Tabellennamen ein, z.B. so:
- Erster Test: nur Tabellenname, z.B. 'xx'
- Zweiter Test: SQL-Kommando, z.B. 'SELECT i, d FROM xx WHERE i=123;'
Bitte beachten Sie unbedingt die wichtigen Kommentare zu diesem Programmierbeispiel unter techdocs/jsp-grundlagen.htm#DatenbankTabelleAnzeigen. Weitergehendes finden Sie unter techdocs/java-sql.htm und techdocs/sql.htm.
Installationsbeschreibungen finden Sie unter jsp-install.htm
JSP-Grundlagen finden Sie unter jsp-grundlagen.htm.
Weitere JSP-Themen finden Sie unter index.htm#JSP.