Thread von Servlet aus starten

Status
Nicht offen für weitere Antworten.

nenico84

Mitglied
Hallo,

ich brauch eure Hilfe!!! Bin jetzt schon seit 2 Tagen am Versuchen, einen Thread von einem Servlet aus zu starten!!! Vom Applet aus geht's einwandfrei, deshalb denk ich dass der Thread ok ist. Der Thread soll nur gestartet werden, er generiert dann ein Diagramm und speichert dieses als png ab. Zur Veranschaulichung hier ein vereinfachter Quellcode:

Code:
public class ImageMapDemo1 extends HttpServlet {
    Barchart b;    //Das ist der Thread
    
    public void init(){
        b = new Barchart();
        b.setDaemon(true);
        b.setPriority(Barchart.NORM_PRIORITY);
        b.start();
    }
    
    public void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title>JFreeChart Image Map Demo</title>");
            out.println("<style>body{background:blue;font-family:Verdana;}</style>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Hallo Nico!</h1>");               
            out.println("<img src=\"barchart100.png\" \"width=\"600\" height=\"400\" border=\"0\" usemap=\"#chart\">"); //Hier wird das im Thread erzeugte png ausgegeben...
            out.println("</body>");
            out.println("</html>");
            out.close();      
    }
//... anschließend folgen noch die DoGet- und die DoPost-Methode, die aber auch die processRequest-Methode aufrufen...

Und hier der Code für den Thread (stark vereinfacht...)
Code:

Code:
public class Barchart extends Thread{
    
    public Barchart() {
         
    }
    
    /**
     * Start-Methode...
     */
    public void run(){
       //hier wird das Diagramm erzeugt und als png abgespeichert...
    }


... Mehr brauch ich doch nicht, oder? Oder muss ich in der build.xml-Datei vielleicht noch was verändern? Er compiliert alles und das Servlet läuft auch, er zeigt auch das png an, wenn ich eins einfüge, nur wird der Thread nicht gestartet (--> kein png erzeugt) und ich blick einfach nicht warum!!! Wäre super wenn mir jemand weiterhelfen könnte!!!... Vielen Dank!
 
S

SlaterB

Gast
schau doch bisschen woran es liegt?!

z.B. das init, wird das überhaupt ausgeführt?
Code:
public void init(){ 
   System.out.println("init meldet sich zum Dienst");
   ....
}
schon weist du es,

genauso vielleicht Meldungen in Kosntruktor + run-Operation vom Thread usw.
bis du genau weist, was das Programm tut,

vielleicht speichert es ja das Bild woanders als du denkst?
 

nenico84

Mitglied
Hab ich gemacht... sowohl die init() als auch der Konstruktor als auch die run()-Methode werden ausgeführt... überall kommt der System.out.println-Befehl durch... Die Bilddatei wird aber nirgends auf dem Rechner erzeugt...

Dann kann es eigentlich doch nur an der Syntax in der run-Methode liegen, oder? Es handelt sich um ein mit JFreeChart erstelltes Diagramm...

Die Syntax ist folgendermaßen:

Code:
public void run(){
CategoryDataset dataset = createDataset(); //ruft Dataset-Methode auf, die ein Dataset erzeugt
JFreeChart chart = createChart(dataset); //erzeugt mithilfe des Datensatzes eine Chart

//Nun wird das Chart in eine png-File geschrieben
try{
   final ChartRenderingInfo info = new ChartRenderingInfo (new StandardEntityCollection());
   final File file1 = new File("barchart100.png");
   ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, info);
}
catch (IOException ex){
   ex.printStackTrace()
}

}

Hat jemand eine Ahnung?
 
S

SlaterB

Gast
....

hast du denn jemals in einem normalen Servlet ganz einfach ein Bild gespeichert oder eine Textdatei erzeugt?

wieso musst du mit so einem komplizierten Thread arbeiten?,
wieso musst du eine JFreeChart erzeugen, seltsamen .png-Dateinamen wählen und und und?

kannst du nicht mit einem klitzekleinen
Code:
new File("test.txt").createNewFile();
anfangen?
oder mit einer Textdatei in welche du "Hello World" reinschreibst?

immer ganz klein anfangen wenn etwas nicht funktioniert,
da musst du das Forum hier nicht unnötig mit komplizierten init-Operationen, Threads und Charts füllen

also ganz von vorne,
wie siehts mit folgenden Code aus, GANZ NORMAL in einem Servlet ausgeführt
Code:
File f = new File("test.txt");
System.out.println("neue Datei erstellen funktioniert?: "+f.createNewFile());
System.out.println("Datei befindet sich wo?: "+f.getAbsolutePath());
ist die Datei erzeugt und vorhanden?

(nimm die drastische Kritik nicht persönlich, soll nur unterstreichen wie total falsch das Vorgehen ist ;) )
 

nenico84

Mitglied
Oh Mann, du bist gut! Hab's gefunden!!! Hat die ganze Zeit funktioniert, nur dass er die Datei im netbeans-Ordner in enterprise3\apache-tomcat-5.5\bin erzeugt! Und meine Suchmaschine hat's da irgendwie nicht gefunden...

Dann muss ich jetzt nur noch einen Weg finden, wie er die Datei in den web-Ordner erzeugt (am besten per relativem Pfad), damit ich sie vom Servlet/JSP aus gleich aufrufen kann...

Danke für die Mühe und sorry für meine unkoordinierte Vorgehensweise ;-)
 
S

SlaterB

Gast
dazu muss ich persönlich passen, bin grad nicht im Thema Servlets drin,

irgendwo wirst du dir sicher den Root-Path geben lassen können,
vielleicht neues Topic wenn sich hier keiner mehr meldet oder gar google-Suche ;)

mit MeineKlasse.class.getResourceAsStream oder ähnlich kann man evtl. Pfade relativ zu .class-Dateien bestimmen
 
G

Guest

Gast
hier bekommste den pfad vom verzeichniss in dem dein projekt liegt.
einfach dann entsprechenden ordnernamen anfügen falls gewünscht.




servlet: String pfad = rq.getSession().getServletContext().getRealPath("/");


jsp: String pfad = application.getRealPath("/");
 

kasi

Mitglied
Wenn man vom Servlet aus einen Thread startet, ist der dann an die Server(Request)Timeout gebunden? - Wäre eigentlich unlogisch..

Wenn ich allerdings einen Thread im Servlet starte und das Ergebnis dort auch wieder verwenden will, dann schon, oder?!
 

kasi

Mitglied
naja, wenn der browser wartet doch auf nachricht vom server, wenn allerdings keine nachricht gesendet werden kann, bevor der server timeoutet, DANN wird doch auf client seite ne 400er meldung angezeigt..
 
S

SlaterB

Gast
daher wird z.B. der Thread, der das Servlet kontrolliert/ den Request durchführt, beendet,
interessiert deinen eigenen Thread aber auch nicht die Bohne
 
S

SlaterB

Gast
wenn ein Server ein Timeout sendet, dann sollte das der Client mitbekommen, ja ;)
 

kasi

Mitglied
gut. muss ich mir also nur noch überlegen, wie ich das timeout umgehe, ohne es hoch zu setzen, bzw. wie ich im server sage, dass er so lange thread.isalive zum browser schickt, bis thread tot is und dann der server das ergebnis sendet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Long polling, deferredResult, Thread Allgemeines EE 1
F JMS MessageListener als Thread Allgemeines EE 3
R Gemanagte ( kontrollierte ) Thread in JEE5 Allgemeines EE 9
G jeder request eigener Thread ? Allgemeines EE 4
Y Tomcat Thread-Handling Allgemeines EE 2
E Eine Art Thread.sleep() in JSTL? Allgemeines EE 4
G Jakarta Servlet API 5.0 Allgemeines EE 1
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
Dimax Servlet Servlet Kommunikation Allgemeines EE 18
K Unterschied zwischen JSP & Servlet gegenüber REST mittels JAX-RS Allgemeines EE 1
Dimax Servlet läuft in Eclipse, aber nicht im Browser Allgemeines EE 74
M URL Servlet Request getParameter Allgemeines EE 2
M Servlet Methoden Aufruf im Servlet Allgemeines EE 10
J 404 Not found (Servlet) Allgemeines EE 1
J Asynchrones Servlet löst NullPointerException aus Allgemeines EE 5
E Servlet Servlet das richtige? Allgemeines EE 11
B HTTP-Header-Inspektor-Servlet Allgemeines EE 1
N JSP Servlet mit JSP ansprechen Allgemeines EE 2
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
J FTP und Servlet Allgemeines EE 11
H Post an Servlet Allgemeines EE 2
A Binärdatei vom Servlet erzeugen lassen Allgemeines EE 3
S Servlet Authentication Filter Allgemeines EE 0
S LDAP JAAS oder Servlet Allgemeines EE 0
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
F eigene Anwendung per Servlet Container starten Allgemeines EE 9
F Servlet Daten im Speicher ablegen Allgemeines EE 3
L Servlet ClassNotFoundException Servlet Allgemeines EE 3
G Allgemeine Frage zu Authentifizierung mittels Servlet API Allgemeines EE 2
J Servlet "package does not exist" Allgemeines EE 5
K Servlet-Mapping Allgemeines EE 9
0 Servlet mit ArrayList Allgemeines EE 3
E Servlet unter mehreren Adressen Allgemeines EE 16
S Pfad-Zugriff über Servlet-init() Allgemeines EE 2
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
S Servlet.service() threw exception Allgemeines EE 4
A Servlet erkennt request Objekt nicht Allgemeines EE 8
G Direkter Zugriff auf Servlet- doPost Allgemeines EE 15
G Servlet doGet, doPost Allgemeines EE 3
A Kodierungsproblem bei Parameterübergabe von Browser an Servlet (GET) Allgemeines EE 2
Antoras servlet-mapping auf dynamische URLs Allgemeines EE 17
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
MQue Ajax - Servlet Allgemeines EE 2
MQue Servlet Allgemeines EE 9
S [Design] Dynamischer EJB Aufruf von Servlet Allgemeines EE 3
S Servlet auf JBoss 5? Allgemeines EE 11
B HttpSession bekommen wenn nicht in Servlet Allgemeines EE 8
MQue Servlet / Button Allgemeines EE 5
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
U javax.faces und javax.servlet cannot be resolved Allgemeines EE 2
W Potentielles Memory Leak bei Servlet Allgemeines EE 6
B unterschied servlet und bean Allgemeines EE 2
Escorter Servlet .sar und jede Menge .jar Archive Allgemeines EE 2
N Servlet und JSF (URL-Rewriting)? Allgemeines EE 3
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
N Servlet zyklisch aktualisieren Allgemeines EE 2
zilti Verbindung Applet <-> Servlet Allgemeines EE 5
ARadauer Servlet Bild Rückgabe Allgemeines EE 2
I Über Formular Daten zu Servlet Allgemeines EE 36
H Servlet - Zwischenmeldung anzeigen bei längerer Berechnung Allgemeines EE 2
G Ordner mit Umlauten einlesen - Servlet Allgemeines EE 3
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
M Zwei Buttons in einem Servlet Allgemeines EE 2
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
B Servlet Allgemeines EE 3
G EJB - EJB wird nicht ins Servlet geladen Allgemeines EE 3
K load-on-startup -> in der Servlet Klasse Allgemeines EE 6
G Objekt an Servlet übergeben - oder Objekt global definieren? Allgemeines EE 4
W Was bei Servlet-Entwicklung alles beachten? Allgemeines EE 8
R Zugriff auf Filter Servlet Allgemeines EE 10
I JBOSS Jsp Files Pfad im Servlet? Allgemeines EE 4
N Servlet-Request abbrechen? Allgemeines EE 3
D Java Servlet mit Radio Buttons Allgemeines EE 2
G Servlet debugging Allgemeines EE 8
N JSP: Collection im Servlet überwachen (mit AJAX)? Allgemeines EE 5
J Socket daten darstellen per jsp,servlet Allgemeines EE 2
W servlet über https Allgemeines EE 2
L Servlet kann Funktion nicht aufrufen Allgemeines EE 3
B Parameterübergane von Servlet an JSP funktioniert nicht ? Allgemeines EE 2
M Aus einem Servlet auf ein anderes zugreifen ? Allgemeines EE 2
G Servlet Serializable Allgemeines EE 2
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Servlet - Importieren von Code Allgemeines EE 2
P Java Servlet - Umgang mit Verlinkungen Allgemeines EE 7
M Wert aus Servlet an normale Klasse übergeben Allgemeines EE 2
E Servlet soll JFRame öffnen. Jframe.setvisible schlägtfehl Allgemeines EE 2
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
D Servlet Problem über Server Allgemeines EE 26
K Servlet per Formular aufrufen Allgemeines EE 8
L sessions mit servlet oder jsp ? Allgemeines EE 9
B JSF - Servlet mit Parametern über einen Link öffnen Allgemeines EE 3
D Binärdaten im Servlet entgegen nehmen, aber wie? Allgemeines EE 5
T Servlet-Instanzen und ServletContext Allgemeines EE 2
L speichern von daten mittels servlet in xml Allgemeines EE 8
N Collection überwachen (Servlet + AJAX) Allgemeines EE 3
N Liste mit Checkboxen an Servlet übergeben? Allgemeines EE 3
T Wie Datenbank und Servlet koppeln? Allgemeines EE 3
G Ladeseite anzeigen lassen während das Servlet noch arbeitet? Allgemeines EE 6
P Tomcat Servlet POST Daten als Array Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben