Suchen und Finden
Service
Infos und Kontakt
2.6 JavaServer Pages zur Konfiguration (S. 131-133)
2.6.1 Problemstellung
Wie können Konfigurationsdateien zentral auf dem Server administriert und für entfernte Anwendungen zur Verfügung gestellt werden?
2.6.2 Technischer Hintergrund
Für die Konfiguration von Anwendungen enthält das Java API eine Reihe von Hilfsklassen, die eine Vielzahl von Technologien benutzen. Neben einfachen Umgebungsvariablen (System.getProperty(…)) werden java.util.Properties und ResourceBundle sowie die neuen java.util.prefs.Preferences angeboten; J2EE-Komponenten lesen durch den JNDI-Kontext indirekt standardisierte Deskriptoren.
Java-Anwendungen verwenden natürlich keine der angeführten Klassen direkt. Es ist eine der ersten Aufgaben selbst des einfachsten Frameworks, einen Property Manager zu definieren, der die verwendeten Technologien kapselt. Es kommt damit nur noch darauf an, ein möglichst einfach administrierbares System aufzusetzen.
2.6.3 Lösung
Für eine zentrale Verwaltung von Properties bietet sich eine Datenbank-Tabelle an. Nachdem JDBC-Treiber jedoch nicht einfach Firewalls durchtunneln können und SQLAbfragen auch einen beträchtlichen Overhead erzeugen, wird auf dem Server eine JSP eingesetzt.
2.6.4 Praxis
Die JSP wird als J2EE-Komponente definiert und hat damit sofort Zugriff auf eine Data-Source. Die Konfigurationen werden einfach über ein Select-Statement erhalten:
<%MessageFormat format = new MessageFormat("{0}={1}");
InitialContext ctx = new InitialContext();
String tableName = (String)ctx.lookup("java:comp/env/tableName");
DataSource src = (DataSource)ctx.lookup("java:comp/env/jdbc/ConfigDB");
Connection con = src.getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from " + tableName);
JspWriter writer = pageContext.getOut();
Object[] params = new Object[2];
while(rs.next()){
params[0] = rs.getObject(1);
params[1] = rs.getObject(2);
out.write(format.format(params));
out.write("");
}
%>
Der Zugriff darauf erfolgt über die URL der installierten JSP:
public class JSPPropertyManager implements PropertyManager {
private Properties props;
public JSPPropertyManager(URL pUrl) {
try {
props = new Properties();
BufferedInputStream bis =
new BufferedInputStream(pUrl.openStream());
props.load(bis);
}
…
public Object getProperty(String pPropertyName) throws
PropertyAccessException {
try {
return props.get(pPropertyName);
} catch (Exception e) {}
Die Key-Value-Paare der Konfiguration werden in diesem Beispiel beim Zugriff komplett auf den Client übertragen. Es spricht aber natürlich nichts dagegen, im Request die zu suchenden Schlüssel anzugeben und so die JSP als zentrale Read-Only Hashtable zu verwenden.
2.7 JavaServer Pages zur Erzeugung beliebiger Formate
2.7.1 Problemstellung
Kann eine JavaServer Page auch andere Formate als HTML generieren?
2.7.2 Technischer Hintergrund
Verteilte Anwendungen erhalten die Daten von einem Server in speziell aufbereiteter Form. RMI-Clients erwarten einfache Datentypen oder serialisierte Java-Objekte, Browser formatierte HTML-Dateien, SOAP-Clients XML-Daten usw. Ein komplettes Framework, das beliebig transformierte XML-Dokumente zur Verfügung stellt, ist Apache Cocoon (http://www.apache.org). Darin sind eine Menge von Ausgabeformaten unterstützt; das Spektrum reicht von (natürlich) HTML und XML über PDF, SVG etc. bis hin zu WML.
Für eigene spezielle Anforderungen können aber auch mit geringem Aufwand Java- Server Pages eingesetzt werden. JSPs sind bisher häufig nur im Einsatz, um komfortabel HTML-Seiten zu generieren. Diese Beschränkung ist aber nicht system-immanent! Eine JSP wird bekanntermaßen intern in ein Servlet umgewandelt, das eigentlich nichts anderes macht, als Daten in einen Ausgabestrom zu schreiben. Das Dateiformat bleibt vollkommen frei.
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion

























