Kurzeinführung zu dynamischen Webseiten mit JSP (Java Server Pages)

+ andere TechDocs
+ andere Java-Docs
+ andere JSP-Docs
+ Webanwendungen
+




Inhalt

  1. Webanwendungen, Applikationsserver, n-Tier-Architektur
  2. Technologien für dynamische Webseiten per Applikationsserver
  3. Einige Java-Begriffe, -Plattformen und -Programmarten
  4. JSP- und Java-EE-Applikationsserver
  5. Installation von Tomcat
  6. Hello World in JSP
  7. JSP zur Anzeige einer Datenbanktabelle
  8. Weiterführende Informationen


Webanwendungen, Applikationsserver, n-Tier-Architektur

Vorteile von Webapplikationen über einen Applikationsserver:

Webanwendungen werden typischerweise in drei Schichten realisiert (3-Tier):

Weiteres zu Applikationsservern finden Sie unter techdocs/applicationserver.htm.





Technologien für dynamische Webseiten per Applikationsserver

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 Java-Begriffe, -Plattformen und -Programmarten

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.


JSP- und Java-EE-Applikationsserver

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


Installation von Tomcat

  1. Java SE JDK installieren (siehe techdocs/java-install.htm).
  2. Tomcat installieren (siehe techdocs/jsp-install.htm).
  3. In '.../Tomcat/conf/server.xml' den HTTP-Port anpassen.
  4. Eventuell benötigte zusätzliche .jar-Bibliotheken (z.B. JDBC-Treiber) nach '%JAVA_HOME%/jre/lib/ext' kopieren.
  5. Tomcat starten und im Webbrowser testen mit der URL 'http://localhost' (bzw. 'http://localhost:8080').
  6. Von anderem vernetzten Rechner aus die IP-Adresse oder den Computernamen des Tomcat-Servers als URL im Webbrowser eintragen und testen.


Hello World in JSP

<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').



JSP zur Anzeige einer Datenbanktabelle

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.



Weiterführende Informationen

Installationsbeschreibungen finden Sie unter jsp-install.htm

JSP-Grundlagen finden Sie unter jsp-grundlagen.htm.

Weitere JSP-Themen finden Sie unter index.htm#JSP.





Weitere Themen: Webanwendungen | andere JSP-Docs | andere Java-Docs | JavaScript | HTML | SQL | andere TechDocs
© 1998-2007 Torsten Horn, Aachen