# Stehen alle Klassen der JRE zur Verfuegung..?



## sirbender (28. Nov 2009)

Hi,

sorry wenn meine Fragen dumm erscheinen aber wenns ums 'Web' geht bin ich blutiger Beginner.

Ich (glaube) fuer meine Zwecke will ich ein Servlet schreiben. Dazu brauch ich einen Servlet Container. Was ist denn der leichtgewichtigste denn ich dann leicht spaeter auch auf dem Server laufen lassen kann? Tomcat? Oder wuerdet ihr mir was anderes empfehlen?

Ich will dass man eine URL im Browser aufrufen kann mit einem Parameter in der URL: http://example.de/caption?text=Dies_ist_eine_Bildunterschrift

Das Servlet gibt dann ein Bild mit der Unterschrift "Dies_ist_eine_Bildunterschrift" zureck.

Ich frage mich ob ich im Servlet vollen Zugriff auf Klassen wie java.awt.Font, Graphics2D, usw. habe um einem Bild eine Bildunterschrift zu verpassen? Oder stellt eine Servlet Umgebung gewisse Klassen nicht zur Verfuegung?


Danke,
sb


----------



## sirbender (28. Nov 2009)

Steht Multithreading zur Verfuegung. Was ich bisher gelesen habe eher nicht. Gibt es Ausnahmen doch mehrere Threads selbst zu oeffnen? Warum wird dies verhindert?


----------



## Noctarius (29. Nov 2009)

Es kommt drauf an was du machen willst. Auf normalen Java-Servlet-Servern (z.B. Tomcat) darfst du eigene Threads öffnen. Auf Enterprise-Servern soll man es nicht (soweit ich das weiß), da gibt es dann andere Möglichkeiten Vorgänge zu parallelisieren.


----------



## sirbender (29. Nov 2009)

Du meinst also man kann in einem Servlet das man auf Tomcat laufen laesst einfach mehrere Threads mittels

new Thread() {...}; oeffnen und starten. Verstoesst das gegen irgendwelche Konventionen? Kann ich das Servlet dann nicht mehr in einem anderen Container laufen lassen?

Danke,
sb


----------



## Noctarius (29. Nov 2009)

Wer sagt, dass das gegen die Konventionn verstößt? Applicationserver sind was anderes als reine Servlet-Container (wie z.B. Tomcat einer ist)


----------



## sirbender (29. Nov 2009)

Und was ist z.B. mit Jetty? Dabei handelt es sich doch auch um einen Servlet-Container. Wuerde er mit dem Multi-Threaded Servlet klarkommen?

Wenn ja heisst das, dass Multi-Threaded Servlets der Servlet-Specification entsprechen?


----------



## Noctarius (29. Nov 2009)

Die Frage ist ja, was hast du mit dem "Multi-Thread" Servlet vor? Natürlich kannst du die Ausführung des Servlets nicht sauber verhindern, bis Thread X abgearbeitet ist.

Und ja Jetty ist auch nur ein Servlet Container.


----------



## sirbender (29. Nov 2009)

Sagen wir ich rechne was aus mit einen ThreadPool. Wenn dieser fertig ist legt er das Ergebnis in einer Variablen ab.

Diesen ThreadPool starte ich im Servlet-Thread. Den Servlet-Thread selbst lege ich in einer Schleife immer wieder fuer 100ms schlafen und checke nach dem Aufwachen ob der Threadpool fertig ist. Sollte er dies sein, kann der Servlet-Thread die Anfrage abschliessen.

Apropos - sind Klassen wie java.awt.Font im Servlet Container verfuegbar? Ich wuerde z.B. einem Bild gerne eine Caption verpassen. Dafuer braeuchte ich viel aus dem AWT.


----------



## Noctarius (29. Nov 2009)

Diese Idee solltest du ganz ganz schnell vergessen. Du wirst dir auf Dauer deinen Servlet Container mit schlafenden Requests töten. Besser wäre es (wenn überhaupt) die Berechnung zu starten und von der HP aus alle paar Sekunden einen Request zu starten (z.B. mit einer eindeutigen ID) ob die Berechnung, welche zu der ID gehört, bereits fertig ist, wenn ja Ergebnis senden, sonst eben nicht.

Niemals solltest du den Servlet-Request schlafen legen, zumal ein Servlet-Container die Ausführung nach einer gewissen Zeit (z.B. 30 Sekunden) zwanghaft töten darf um sich selbst nicht zu locken.

Wenn man mit Threads arbeitet muss man vorsichtig damit umgehen.


----------



## sirbender (29. Nov 2009)

Danke ich glaubs ich habs verstanden. Darf ich noch kurz fragen was 'HP' heisst?

Die Frage mit der Font Klasse kannst du nicht beantworten nehme ich an?


----------



## Noctarius (29. Nov 2009)

HP = Homepage

AWT Klassen sind prinzipiell im eingeschränkten Rahmen im Servlet-Container verfügbar (zu mindestens bei Tomcat) wenn man als Startparameter angibt, dass SWT im Headless Modus (also ohne X-Server) laufen soll. Dann kann man damit auch Bilder rendern.


----------



## sirbender (29. Nov 2009)

Hmm...lass mich es kurz zusammenfassen:

Ein user sendet an meine Servlet-URL ein Get-Request. Das Servlet started und erhaelt eine eindeutige ID. Jetzt macht die HP was? Was ist ueberhaupt die HP wirklich? Der Server auf dem die Homepage liegt? Irgendwie raff ich es doch nicht wie es scheint.


----------



## Noctarius (29. Nov 2009)

Deine Homepage (Website) oder dein Client (wie auch immer du auf den Server zugreifst) macht einen GET-Request. Daraufhin wird ein Berechnungsthread gestartet und diesem eine eindeutige ID zugewiesen, welche das Servlet zurück an den Client übermittelt. Alle paar Sekunden macht der Client nun eine neue Anfrage und übergibt dabei die ID welche er bekommen hat. Anhand dieser kann der Sevrer schauen ob das Ergebnis berechnet wurde und das Ergebnis liefern oder eben den Client weiter vertrösten und anhalten erneut nachzufragen.


----------



## sirbender (29. Nov 2009)

Ach so - verstehe. Bei mir ist der Client aber ein Browser dem ich nicht sagen kann, dass er in 10 sec. nochmal nachfragen soll.

Wenn ich einen Timeout von 30 sec. habe waere es halt clever wenn ich dies voll ausnutzen koennte indem ich mehrere Threads starte. Mit nur einem Threads reicht es meist nicht aus.


----------



## Noctarius (29. Nov 2009)

Doch kannst du. HTTP-META-REFRESH oder per JavaScript window.timeout und Ajax-Request


----------

