# Bild speichern und auf JSP zeigen



## Dimax (2. Nov 2018)

Guten Tag,
Seit ein paar Tagen versuche ich in meinem Programm ein Bild zu peichern um auf der Jsp Seite darstellen zu können:

```
//methode die das Bild speichert
JFreeChart chart= ChartFactory.createPieChart(titel,data,true,true, false);//Tortendiagramm mit // JfreeChart wird erstellt..funktioniert 100%
File file1 = File.createTempFile(
                    ServletUtilities.getTempFilePrefix(), ".png", 
                    new File(System.getProperty("java.io.tmpdir")));//File wird deklariert..funktioniert
ChartUtilities.saveChartAsPNG(file1,chart, 500, 400, info);//Das Bild wird gespeichert..vermute //das Problem liegt bei dem Speicherort..
return file1.getAbsolutePath();//Rückgabe
```

Im weiterem Verlauf wird das Bild auf der JSP-Seite aufgerufen

```
<img src=<%=methoden.TestChart.statistikDarstellung(topKomplex,titel,header) %> alt="top" />
```
Es kommt keine Fehlermeldung nur das Bild wird nicht angezeigt.
Hat jemand Ahnung woran es liegen könnte?


----------



## mrBrown (2. Nov 2018)

Den Fehler dürftest du finden, wenn du die Entwickler-Tools im Browser mal öffnest...


----------



## Dimax (7. Nov 2018)

Seit Tagen versuche ich vergeblich das hinzukriegen: Dass ist web.xml wo ich TestChart als Servlet deklariere

Das ist der Servlet:

```
public class TestChart extends HttpServlet{
    private static final long serialVersionUID = 1L;

@Override
 protected void doPost(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException {
antwort.setContentType("image/png");      
        String aktion=anfrage.getParameter("aktion");
        String header=new String("");
        String titel=new String("");
        OutputStream out=antwort.getOutputStream();
        String top[][]=daten.einlesen.ProgrammAnalyse.topTenKomplex();
            header="Top Komplexität";
            titel="Top Komplex";
            ChartUtilities.writeChartAsPNG(out, statistikDarstellung(top,titel,header), 600, 500);
}
public static JFreeChart statistikDarstellung( String dataArray[][],String titel,String header) throws IOException {
DefaultPieDataset data=new DefaultPieDataset();      
        for(int i=0;i<dataArray.length;i++){
            data.setValue(dataArray[i][0],Double.parseDouble(dataArray[i][1]));
        }
JFreeChart chart= ChartFactory.createPieChart(titel,data,true,true, false);
chart.setBorderPaint(Color.GREEN);
        chart.setBorderStroke(new BasicStroke(5.0f));
        chart.setBorderVisible(true);
return chart;
}
}
```
Danach versuche ich im Browser das Bild anzeigen

```
...Statisik.jsp
<%
out.print("<tr><td colspan=\"3\">"+
"<form action=\"Statistik.jsp?aktion=topKomplex\" method=\"post\">"+
        "<input type=\"submit\" value=\"Top 10 Komplexität Diagramm\"/>"+
                "<form action=\"TestChart.java?aktion=topKomplex\" method=\"post\">"+//Bin mir nicht sicher ob ich  so eine Anfrage an den Servlet schicken kann
                "<input type=\"hidden\" value=\"topKomplex\"/>"+//Weitere Buttons
String aktion=new String("");
    aktion=request.getParameter("aktion");
    if(aktion.equals("topKomplex")){
      
        header="top Komplex";
        titel="Top 10 Programmen nach Komplexität";
           BufferedInputStream bin=new BufferedInputStream(request.getInputStream());
            BufferedImage img=ImageIO.read(bin);
//Versuch mit <%!BufferedImage img=ImageIO.read(bin)%> scheiterte ...bin unbekannt
%>
<br />
<iframe  align="left" width="49%" height="600"  frameborder="1" ><img src="<%hier soll das Bild vom InputStream hin%>"></iframe><!--Versuch mit<%=img%> brachte nichts..img nicht erkant -->
<iframe   align="right" width="49%" height="600" frameborder="1" src="DatenbankStatistik.jsp"></iframe>
```
Was mache ich falsch oder was habe ich nicht gemacht?
Danke im Voraus


----------



## mrBrown (7. Nov 2018)

https://stackoverflow.com/questions/10564594/pass-dynamic-image-to-jsp-with-servlet


----------



## Dimax (7. Nov 2018)

Danke mrBrown für den Link,habe reingeschaut ..einzige Änderung die ich gemacht habe :
Im TestChart.java

```
package Auswertung;
@WebServlet("/TestChart") // das hatte ich nicht
import java.....usw
```
sonst ist alles was auf der Seite von deinem Link geschrieben ist habe ich gemacht.Nun bekomme ich
im <iframe> Tag
*HTTP Status 404 – Not Found*
*Type* Status Report

*Message* /sasco/Auswertung/TestChart

*Description* The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

*Apache Tomcat/8.5.30*


----------



## Dimax (7. Nov 2018)

also im <iframe> steht

```
<iframe  align="left" width="49%" height="600"  frameborder="1"  src="TestChart?aktion=topKomplex"></iframe>
```


----------



## mrBrown (7. Nov 2018)

Warum willst du ein Bild als iframe einbinden?
Dein Servlet reagiert nur auf POST, Bilder werden per GET eingebunden.


----------



## Dimax (7. Nov 2018)

habe gelesen dass die iframes deprecated sind aber die sind gut um die Seiten darzustellen die öfters aktualisiert werden wärend die div`s komplette Seite neuladen .Meinst du mir fehlt dan Methode doGet überschreiben im Servlet?


----------



## mrBrown (7. Nov 2018)

Dimax hat gesagt.:


> habe gelesen dass die iframes deprecated sind aber die sind gut um die Seiten darzustellen die öfters aktualisiert werden wärend die div`s komplette Seite neuladen


Äh, Hä?

Du willst Bilder anzeigen. Also `<img/>`. Nichts mit div oder iframe.



Dimax hat gesagt.:


> Meinst du mir fehlt dan Methode doGet überschreiben im Servlet?


Ja.


----------



## Dimax (7. Nov 2018)

Ich habe folgende Änderungen

```
out.print("<tr><td colspan=\"3\">"+
"<form action=\"Statistik.jsp?aktion=topKomplex\" method=\"post\">"+
        "<input type=\"submit\" value=\"Top 10 Komplexität Diagramm\"/>"+
                "<form action=\"TestChart.java?aktion=topKomplex\" method=\"get\">"+//auf get geändert
                "<input type=\"hidden\" value=\"topKomplex\"/>"+
```
danach zum Testen auf der Seite:

```
<img src="TestChart?aktion=topKomplex" />
```
Und im Servlet 

```
protected void doGet(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException { //vom doPost auf doGet geändert
```
Unten das Bild warum iframe->Ich wollte auf Button click nur die Bilder im iframe ändern nicht die komplette Seite neu laden..weil da sind mehrere Tabellen mit den werten aus DB für die man Ladezeit braucht.Kann sein das es der falsche Weg ist..bin auch noch kein Profi
Im Bild sieht man das es 3 Fehler gibt..wie kann die Lesen?


----------



## mihe7 (8. Nov 2018)

Mal ein Beispiel. Nicht besonders schön und ein HTML-Validator wird vermutlich schreiend davonlaufen, für den Zweck sollte es jedoch genügen.

Erst mal ein simples Servlet. Dieses liefert zur Veranschaulichung einfach ein "zufälliges" Bild, damit man sieht, das was passiert.

```
@WebServlet("/image")
public class RandomImage extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        byte[] data = getImage();
        resp.setContentType("image/jpeg");
        resp.setContentLength(data.length);
        try(OutputStream out = resp.getOutputStream()) {
            out.write(data);
        }
    }

    private byte[] getImage() throws IOException {
        BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = img.createGraphics();
        g2.setColor(Color.WHITE);
        g2.fillRect(0, 0, 400, 400);
        g2.setColor(Color.RED);
        g2.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 16));
        g2.drawString(Long.toString(System.currentTimeMillis()), 10, 100);
        g2.dispose();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(img, "jpeg", os);
        return os.toByteArray();
    }
}
```

Dann das JSP-File (hier eigentlich nur HTML):

```
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JSP Test</title>
</head>
<body>
  <button id="refresh" type="button">Refresh</button>
  <img id="image" src="image" />
  <script>
    document.getElementById("refresh").addEventListener("click", function(e) {
      document.getElementById("image").src = 'image?' + new Date().getTime();
    });
  </script>
</body>
</html>
```
Das Script am Ende ist selbsterklärend: es fügt einen click-Listener zum Button hinzu, der das src-Attribut des Bildes anpasst. Der Query-Teil der URI ist dazu da, dass der Browser-Cache umgangen wird. Letzteres ist nicht immer in der Form erwünscht, in diesem Beispiel aber schon


----------



## Dimax (8. Nov 2018)

Ausprobiert..


----------



## mihe7 (8. Nov 2018)

Ich weiß nicht, was Du da ausprobiert hast, mein Beispiel auf jeden Fall nicht.

Der Fehlermeldung und dem beschränkten Screenshot nach zu urteilen, gibt es kein Element mit der ID, die in der als fehlerhaft markierten Zeile in document.getElementById angegeben ist. Man sieht das auf dem Screenshot nicht.


----------



## Dimax (8. Nov 2018)

TestChart.java  geändert

```
package Auswertung;
@WebServlet("/TestChart")
public class TestChart extends HttpServlet{

    private static final long serialVersionUID = 1L;
@Override
 protected void doGet(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException,        IOException {
    System.out.println("Get gekommen");
        String top[][]=daten.einlesen.ProgrammAnalyse.topTenKomplex();
        String header=new String("Top Komplexität");
        String titel=new String("Top Komplex");
        byte [] ding=statistikDarstellung(top,titel,header);
        antwort.setContentType("image/png"); 
        antwort.setContentLength(ding.length);
        try(OutputStream outs=antwort.getOutputStream()){
            outs.write(ding)
          }catch(Exception e){e.printStackTrace();}
   }
public static byte[] statistikDarstellung( String dataArray[][],String titel,String header) throws IOException {
        DefaultPieDataset data=new DefaultPieDataset();       
        for(int i=0;i<dataArray.length;i++){
            data.setValue(dataArray[i][0],Double.parseDouble(dataArray[i][1]));
        }  
        JFreeChart chart= ChartFactory.createPieChart(titel,data,true,true, false);
        chart.setBorderPaint(Color.GREEN);
        chart.setBorderStroke(new BasicStroke(5.0f));
        chart.setBorderVisible(true);    
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ChartUtilities.writeChartAsPNG(os,chart , 600, 500);
        System.out.println("chart gesendet");
        return os.toByteArray();
   
        }
}
```

Statistik.jsp liegt im package Auswertung


```
.....
out.print("<tr><td colspan=\"3\">"+
"<button id=\"topKomplex\" type=\"button\">Top Komplexität Diagramm</button>"+
//und weitere buttons

%>
    <script>
    document.getElementById("topKomplex").addEventListener("click", function(e) {
      document.getElementById("image").src ='TestChart?' + new Date().getTime();
    });
  </script>
    <%  //...und weitere Sachen..
```

Button ist da ,beim draufdrücken passiert nicht


----------



## mihe7 (8. Nov 2018)

Was sagen die Entwicklertools? Script OK? Netzwerk? Error 404?


----------



## mrBrown (8. Nov 2018)

Dimax hat gesagt.:


> Button ist da ,beim draufdrücken passiert nicht


Und wo ist der img-Tag?


----------



## Dimax (8. Nov 2018)

mihe7 hat gesagt.:


> Was sagen die Entwicklertools? Script OK? Netzwerk? Error 404?


404


----------



## Dimax (8. Nov 2018)

mrBrown hat gesagt.:


> Und wo ist der img-Tag?


vergessen 

```
<iframe   width="40%" height="600"  style="border:3px solid green;" >
<img id="image" src="TestChart" />
</iframe>
```


----------



## mrBrown (8. Nov 2018)

Lass doch endlich mal dieses überflüssige iframe weg...


----------



## Dimax (9. Nov 2018)

gemacht..Ändert aber nichts..Meine einzige Frage ist : wie bekommt man ein Foto aus dem 
response.getOutPutStream ()..


----------



## mihe7 (9. Nov 2018)

@Dimax, die Sache ist doch wirklich trivial (https://www.java-forum.org/thema/bild-speichern-und-auf-jsp-zeigen.182998/page-2#post-1166296): Bilder werden in HTML mit einem img-Tag eingebunden. Der Browser ruft die Bilddaten von der angegebenen URL ab und zeigt das Bild an. Die URL wird auf Serverseite "bedient", indem die Bilddaten als Antwort zurückgegeben werden. Mehr passiert da nicht.

Das JavaScript im HTML-Code sorgt lediglich dafür, dass der Browser das Bild neu abruft, indem die URL des img-Tags neu gesetzt wird.

Wenn irgendwas nicht funktioniert, musst Du halt schauen, was es ist: ist die URL richtig usw. Dafür gibt es das Serverlog auf der einen und die Entwicklertools auf der anderen Seite.


----------



## Dimax (9. Nov 2018)

Wenn ich nach deinem Beispiel mache Server sagt nichts und die Enwicklertools  sind auf dem Bild --src sieht mein Servlet nicht oder was ist gemeint mit: "Cannot set property `src` of null at HTMLButtonElement"


----------



## mrBrown (9. Nov 2018)

Du zeigst da leider den relevanten Code nicht, aber es wird daran liegen, dass es keinen Image-Tag mit der passenden id im Frame gibt.
Grund dafür kann ua das iFrame sein.


----------



## mihe7 (9. Nov 2018)

Dimax hat gesagt.:


> Wenn ich nach deinem Beispiel mache


Nach meinem Beispiel machen, würde ja bedeuten, dass Du vorher schon mein Beispiel gemacht hättest... 

Jetzt mal ernsthaft: so kommst Du doch nicht weiter. Kopier einfach mal Dein JSP zwischen Code-Tags hier rein: [code=HTML]Inhalt Deiner JSP-Datei[/code]

Dann wird man das Problem schon finden.


----------



## Dimax (9. Nov 2018)

Ich habe jetzt extra jsp für das Bild gemach

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   %>
<%@ page import="org.jfree.chart.encoders.*" %>
<%@ page import="com.keypoint.PngEncoder" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.imageio.ImageIO"%>
<%@ page import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chart</title>
</head>
 
        <body>
            <%
                String aktion=new String("");
                aktion=request.getParameter("aktion");
            %>
            <form action="TestChart?aktion=topKomplex"><input type="hidden">
            <%
                BufferedImage bi=new
                BufferedImage(600,500,BufferedImage.TYPE_INT_RGB);
            //    ImageIO.write(bi, "png", response.getOutputStream());
            %>
<img src="TestChart?aktion=topKomlpex"></img>
        </body>
</html>
```
Beim Aufruf der Seite  :BIlder liegen bei.Eclipse Console leer


----------



## Dimax (9. Nov 2018)

Wenn ich form und img tägs lösche und ImageIO auskommentiere :
also

```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
   %>
<%@ page import="org.jfree.chart.encoders.*" %>
<%@ page import="com.keypoint.PngEncoder" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.imageio.ImageIO"%>
<%@ page import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Chart</title>
</head>   
        <body>
            <%
                String aktion=new String("");
                aktion=request.getParameter("aktion");
            %>
           
            <%
                BufferedImage bi=new
                BufferedImage(600,500,BufferedImage.TYPE_INT_RGB);
            ImageIO.write(bi, "png", response.getOutputStream());
            %>
        </body>
</html>
```
Dann bekomme ich folgende Fehlermeldung in der Console:

```
Nov 09, 2018 2:48:29 PM org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet [jsp] in context with path [/sasco] threw exception [java.lang.IllegalStateException: getOutputStream() has already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:624)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:118)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:111)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:184)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:120)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
```
und die Bilder


----------



## mihe7 (9. Nov 2018)

Jetzt schmeiß das ImageIO raus. Du brauchst den Code von hier: https://www.java-forum.org/thema/bild-speichern-und-auf-jsp-zeigen.182998/page-3#post-1166499

Das Problem ist doch ganz einfach: Deine JSP-Seite liegt unter /sasco/Auswertung. Wenn Du in img dann als src="TestChart" angibst, wird das Servlet unter /Auswertung/TestChart gesucht. Du hast @WebServlet("/TestChart") angegeben. Folglich 404 - not found.

Geh mal her und gib als src "/sasco/TestChart" an.

EDIT: habe noch form durch img ersetzt.
EDIT2: was soll der Käse mit dem Formular?!?


----------



## Dimax (9. Nov 2018)

Ich vermute dass das Servlet nicht gefunden wird..Habe ich denn richtig gemacht?
Weil ich hab 2 web.xml eine für sasco und eine für Server


----------



## mihe7 (9. Nov 2018)

Wenn Du in der Java-Klasse eine Annotation @WebServlet mit Pfadangabe hast, dann entferne doch bitte aus dem XML das Servlet und das Servletmapping. Im XML musst Du dann gar nichts mehr machen. Das URL-Pattern im XML wäre sowieso falsch, denn diesem entsprechend wäre es unter /sasco/Auswertung erreichbar.


----------



## Dimax (9. Nov 2018)

warum wäre es falsch liegt ja auch dort oder sollte ich so ein Eintrag machen?

 <display-name>TestChart</display-name>
    <servlet-name>TestChart</servlet-name>
    <servlet-class>Auswertung.TestChart</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestChart</servlet-name>
    <url-pattern>WebContent/Auswertung</url-pattern>
  </servlet-mapping>


----------



## mihe7 (9. Nov 2018)

Dimax hat gesagt.:


> warum wäre es falsch


Im konkreten Beispiel wäre es falsch. 

Mal ganz allgemein: Das URL-Pattern gibt an, welche URLs von dem betreffenden Servlet behandelt werden sollen. Wenn Du /Auswertung reinschreibst, dann wird Dein Servlet auch nur die Adresse /sasco/Auswertung behandeln, nicht aber z. B. /sasco/Auswertung/TestChart. 

Gibst Du also als URL-Pattern /Auswertung an, musst Du im src-Attribut des img-Tags in Deinem JSP auch /sasco/Auswertung schreiben.


----------



## Dimax (12. Nov 2018)

Also ich bin ein Stück weiter aber das Ziel immer noch nicht erreicht.
Das ist der java-Servlet liegt im gleichen Ordner wie die jsp wo es aufgerufen wird.

```
package Auswertung;

import java.awt.BasicStroke;
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.*;
@WebServlet("/TestChart")
public class TestChart extends HttpServlet{

    private static final long serialVersionUID = 1L;

 
@Override
protected void doPost(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException {
    doGet();
}
 protected void doGet(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException {
        String header=new String("");
        String titel=new String("");
        String top[][];
        byte[]data=statistikDarstellung(top,titel,header);
        antwort.setContentType("image/png");
        antwort.setContentLength(data.length);
try(OutputStream outs=antwort.getOutputStream()){
      outs.write(data);
}catch(Exception e){e.printStackTrace();}
public static byte[] statistikDarstellung( String dataArray[][],String titel,String header) throws IOException {
DefaultPieDataset data=new DefaultPieDataset();
    
        for(int i=0;i<dataArray.length;i++){
            data.setValue(dataArray[i][0],Double.parseDouble(dataArray[i][1]));
        }
JFreeChart chart= ChartFactory.createPieChart(titel,data,true,true, false);
chart.setBorderPaint(Color.GREEN);
        chart.setBorderStroke(new BasicStroke(5.0f));
        chart.setBorderVisible(true);
  ByteArrayOutputStream os = new ByteArrayOutputStream();
        ChartUtilities.writeChartAsPNG(os,chart , 600, 500);
     
        return os.toByteArray();
 
        }
}
```
aus web.xml alles was ich reingeschrieben habe auch gelöscht
auf der jsp rufe ich java-Servlet ohne iframe..gleich nach dem body teg

```
<img src="TestChart.java?aktion=topKomplex">
```
wenn ich im Browser das Progamm mit entwickler tools öffne
bekomme ich Bilder unten .Frage: ich setze content auf image  warum bekomme aber als type text? und warum wird eigentlich das Bild nicht angezeigt?


----------



## mrBrown (12. Nov 2018)

Dimax hat gesagt.:


> Also ich bin ein Stück weiter aber das Ziel immer noch nicht erreicht.


Und was ist das Problem?

EDIT: Dein Code ist ja auch völliger Murks, hat aber nichts mit Servlet etc zu tun...


----------



## mihe7 (12. Nov 2018)

Was ganz sicher ein Problem ist, ist die öffnende Klammer in @WebServlet.


----------



## Dimax (12. Nov 2018)

mrBrown hat gesagt.:


> Und was ist das Problem?
> 
> EDIT: Dein Code ist ja auch völliger Murks, hat aber nichts mit Servlet etc zu tun...


Habe etwas ausversehen gedrückt. Post ist bearbeitet.


----------



## Dimax (12. Nov 2018)

mihe7 hat gesagt.:


> Was ganz sicher ein Problem ist, ist die öffnende Klammer in @WebServlet.


Habe etwas ausversehen gedrückt. Post ist bearbeitet.


----------



## mihe7 (12. Nov 2018)

Dimax hat gesagt.:


> ich setze content auf image warum bekomme aber als type text? und warum wird eigentlich das Bild nicht angezeigt?


Vielleicht, weil Du die java-Datei abrufst (`<img src="TestChart.java?aktion=topKomplex">`)?


----------



## Dimax (12. Nov 2018)

mihe7 hat gesagt.:


> Vielleicht, weil Du die java-Datei abrufst (`<img src="TestChart.java?aktion=topKomplex">`)?


Wenn ich  so schreibe->(`<img src="TestChart?aktion=topKomplex"> [/icode ])

dann bekomme ich 404.`


----------



## mihe7 (12. Nov 2018)

Ja, weil das URL-Pattern des Servlets nicht stimmt.


----------



## mihe7 (12. Nov 2018)

Nochmal: 

Wenn Deine JSP-Datei unter /sasco/Aswertung/xyz.jsp erreichbar ist UND dieses ein img-Tag ausgibt, dessen src-Attribut einen relativen Pfad angibt, dann ist der Pfad relativ zu /sasco/Auswertung zu verstehen. 

Gibst Du also src="TestChart" aus, dann macht der Browser daraus "/sasco/Auswertung/TestChart". 

Dem entsprechend musst das URL-Pattern des Servlets "/Auswertung/TestChart" lauten und nicht "/TestChart".


----------



## mihe7 (12. Nov 2018)

Funktioniert es jetzt?


----------



## Dimax (12. Nov 2018)

wenn ich so schreibe

(`@WebServlet("/TestChart")`)

und im img src= (`<img src="TestChart.java?aktion=topKomplex">`)

dann bekomme ich 304
also der findet ja die alles..wenn ich aber  (`<img src="TestChart?aktion=topKomplex">`)
dann 404 windet nichts mehr.


----------



## Dimax (12. Nov 2018)

wenn ich so schreibe

(`@WebServlet("TestChart")`)

und im img src= (`<img src="TestChart.java?aktion=topKomplex">`)

dann bekomme ich 200
also der findet ja die alles..
nur als Type steht text solte image sein


----------



## mihe7 (12. Nov 2018)

Schreib ich Kisuaheli?!? Das kann ja alles nicht sein.

Schreib in das JSP, das unter /Auswertung liegt: `<img src="TestChart?aktion=topKomplex">`

Und im Servlet

```
@WebServlet("/Auswertung/TestChart")
```

Und im web.xml nix Servlet.


----------



## Dimax (12. Nov 2018)

`<img src="TestChart?aktion=topKomplex">`
Und im Servlet

```
@WebServlet("/Auswertung/TestChart")
```

im web.xml nix Servlet.


----------



## mihe7 (12. Nov 2018)

OK, zeig mal Deine Verzeichnisstruktur im Projekt.


----------



## Dimax (12. Nov 2018)

Beigefügt


----------



## mihe7 (12. Nov 2018)

Das Servlet muss unter Java Resources abgelegt werden.


----------



## Dimax (12. Nov 2018)

wenn ich so schreibe

(`@WebServlet("/daten.eilesen/TestChart")`)

und im img src= (`<img src="/sasco/daten.einlesen/TestChart?aktion=topKomplex">`)

dann bekomme ich 404


----------



## mihe7 (12. Nov 2018)

Vielleicht weil eilesen != einlesen ist?


----------



## Dimax (12. Nov 2018)

eilesen))
mihe7 du bist Top ! Weiss nicht woher du soviel Geduld hast))


----------



## Dimax (12. Nov 2018)

Also im iframe geht auch perfekt .Danke an alle die mir geholfen haben .Vor allem mihe7 und mrBrown .


----------



## mihe7 (12. Nov 2018)

Dimax hat gesagt.:


> Weiss nicht woher du soviel Geduld hast


Das frag ich mich manchmal auch


----------



## mrBrown (12. Nov 2018)

Dimax hat gesagt.:


> Also im iframe geht auch perfekt


Warum willst du immer noch an dem iframe festhalten?


----------



## Dimax (13. Nov 2018)

weil ich versuche  beim button click nur iframe mit dem Bild neu laden


----------



## mihe7 (13. Nov 2018)

@mrBrown it's your turn


----------



## mrBrown (13. Nov 2018)

Dimax hat gesagt.:


> weil ich versuche beim button click nur iframe mit dem Bild neu laden


Einfache Regel:
* willst du html einbinden: iframe
* willst du ein Bild einbinden: img
* willst du ein video einbinden: video

Was willst du einbinden: ein Bild.
Was nimmst du also: img.
Was nimmst du nicht: iframe, vor allem wenn du keine Ahnung davon hat.


Wenn du @mihe7's Beispiel aufmerksam angeguckt hättest, wäre dir aufgefallen, dass das Bild neu geladen wird, vollkommen ohne iframe.


----------



## mihe7 (13. Nov 2018)

Gibts eigentlich eine Beschränkung der Beiträge/Thread?


----------



## Dimax (14. Nov 2018)

mrBrown hat gesagt.:


> Einfache Regel:
> 
> Was nimmst du nicht: iframe, vor allem wenn du keine Ahnung davon hat.
> Wenn du @mihe7's Beispiel aufmerksam angeguckt hättest, wäre dir aufgefallen, dass das Bild neu geladen wird, vollkommen ohne iframe.



Ja leider das war auch der Grund warum ich iframe genommen habe und nicht JavaScript ))Weil ich von Java Script noch weniger Ahnung habe als von  iframe..

Ausprobiert... 

Statistik.jsp

```
...html Sachen...+
<%
out.print("<tr><td colspan=\"3\"><button id=\"refresh\" type=\"button\">Top 10 Komplexität Diagramm</button>"+...usw
%>
<img id="image" src="image" />
      <script>
    document.getElementById("refresh").addEventListener("click", function(e) {
      document.getElementById("image").src = '/daten.einlesen/TestChart?aktion='+aktion;
    });
  </script>
...und weiteren Sachen..
```

Java File ist identisch mit dem Beispiel von @mihe7 und heist (`@WebServlet("/daten.einlesen/TestChart")`)


----------



## mrBrown (14. Nov 2018)

So wie du das iframe bisher eingebunden hast, ist da genau nichts dynamisch dran.

In deiner jetzigen Variante solltest du mal den Button drücken...

(Und nur so am Rande: Webentwicklung ohne Ansatzweise Ahnung von HTML ist nicht unbedingt sinnvoll. Falls du noch weiter machen willst, eigne dir unbedingt Grundlagen an.)


----------



## Dimax (14. Nov 2018)

mrBrown hat gesagt.:


> In deiner jetzigen Variante solltest du mal den Button drücken...
> 
> (Und nur so am Rande: Webentwicklung ohne Ansatzweise Ahnung von HTML ist nicht unbedingt sinnvoll. Falls du noch weiter machen willst, eigne dir unbedingt Grundlagen an.)


Herr mrBrown danke für so eine tolle Motivierung ..jetz weiss ich was ich machen muss..button clicken lehrnen gehen))


mrBrown hat gesagt.:


> Einfache Regel:
> 
> Was nimmst du nicht: iframe, vor allem wenn du keine Ahnung davon hat.


welche Ahnung meinen Sie hier ?:
The <iframe> tag specifies an inline frame.
An inline frame is used to embed another document within the current HTML document
*Attribute* *Value* *Description*
height _pixels_                                                     Specifies the height of an <iframe>
name _text_                                                      Specifies the name of an <iframe>
sandbox                  allow-forms
                              allow-pointer-lock
                              allow-popups
                              allow-same-origin
                              allow-scripts
                              allow-top-navigation           Enables an extra set of restrictions for the content in an <iframe>

src _URL_                                   Specifies the address of the document to embed in the <iframe>
srcdoc _HTML_code_                       Specifies the HTML content of the page to show in the <iframe>
width _pixels_                                 Specifies the width of an <iframe>


----------



## mihe7 (14. Nov 2018)

@Dimax kein Grund, beleidigt zu sein. Ohne Grundlagen funktioniert es nun einmal nicht, da kann @mrBrown jetzt auch nichts dafür. 

Das, was Du hier postest, erweckt nun einmal den starken Verdacht, dass Du in keinster Weise weißt, was Du in Dein HTML schreibst. Weißt Du, was eine URI/URL ist, wofür das src-Attribut im image-Tag da ist, wenigstens grob, was der Browser mit Deinem HTML macht? Das sind einfach Minimalvoraussetzungen, wenn man Webseiten erstellen möchte. Wenn Du plötzlich src="image" angibst und Dich wunderst, dass nichts angezeigt wird, was soll da irgendjemand davon halten?

Bei Java EE kommen noch ein paar andere Dinge hinzu. Sagt Dir z. B. Context-Path was?

Letzter Code von mir zum Thema:


```
<img id="image" src="/sasco/daten.einlesen/TestChart?aktion=topKomplex" />
      <script>
    document.getElementById("refresh").addEventListener("click", function(e) {
      document.getElementById("image").src = '/sasco/daten.einlesen/TestChart?aktion='+aktion+'&'+new Date().getTime();
    });
  </script>
```


----------



## mrBrown (14. Nov 2018)

Dimax hat gesagt.:


> welche Ahnung meinen Sie hier ?:
> The <iframe> tag specifies an inline frame.
> An inline frame is used to embed another document within the current HTML document



Schön zitiert - ein iframe dient zum Einbetten anderer Dokumente. Du willst aber kein Dokument(= HTML) einbetten (zumindest hast du es bisher nie gemacht), sondern ein Bild.


----------



## Dimax (14. Nov 2018)

mihe7 hat gesagt.:


> @Dimax kein Grund, beleidigt zu sein. Ohne Grundlagen funktioniert es nun einmal nicht, da kann @mrBrown jetzt auch nichts dafür.


habe ich ein Grund gegeben um zu denken ich wäre beleidigt?
Entschuldigung Jungs...versuche immer konstruktiv  bleiben ..deswegen auch die Frage welche Grundlagen 
Du hast mir gezeigt welche..Der Post von mrBrown hat zu wenige Informationen enthalten deswegen habe einfach gefragt was soll ich lernen. Ich habe nirgendwo gesagt ich bin Profi..Ich bin  Anfänger und ich lerne gerade. Ich werde niemals beleidigt wenn man sagt zu mir du muss das und das lernen,ich werde fragen was genau?
Wenn jemand mich dabei unterstützt -danke dafür..
ach Übrigens das Programm heist ab jetzt fantastico.Programm..nichts mehr mit sasco oder fiasco


----------



## Dimax (14. Nov 2018)

mrBrown hat gesagt.:


> Schön zitiert - ein iframe dient zum Einbetten anderer Dokumente. Du willst aber kein Dokument(= HTML) einbetten (zumindest hast du es bisher nie gemacht), sondern ein Bild.


Es ging um Verständnis Frage nicht um jetziges Programm..den iframe ist schon längst weg..hat funktioniert erledigt..jetz sind wir beim script..Ich verstehe auch selbst dass das iframe (in meinem code)wird nicht ohne  komplette Seitenaktualisierung funktionieren ..deswegen ist die Seite auch nicht dynamisch..aber Bilder sind doch dynamisch generiert und übertragen ohne zwieschenspechern aufm disk.

Jetziges Problem ich muss auf den Button click -aktion ändern damit ich das Bild mit dem parameter- abrufen kann


----------



## mihe7 (14. Nov 2018)

Dimax hat gesagt.:


> habe ich ein Grund gegeben um zu denken ich wäre beleidigt?


In einem Forum, in dem sich alle Duzen, (plötzlich?) jemanden zu Siezen, ist jetzt nicht der Knaller.



Dimax hat gesagt.:


> Ich bin Anfänger und ich lerne gerade.


Dagegen ist auch nichts zu sagen und ich würde behaupten, dass die meisten in diesem Forum hierfür größtes Verständnis haben. Irgendwie hat jeder mal angefangen.

Du übernimmst Dich aber anscheinend dabei, weil der Schritt zu einer Java EE Anwendung zu groß ist. Genauso wie es hier einige gibt, die Java programmieren lernen wollen und meinen, sie machen das am Besten mal eben mit einem Spiel (natürlich mit grafischer Oberfläche) und ziehen sich dann noch ein YouTube-Tutorial rein, das alles vereint, was man nicht machen sollte.

In Anbetracht der Beiträge auf den letzten sechs Seiten hättest Du z. B. selbst wissen müssen, wie das src-Attribut aussehen muss. Ich denke mal, dass Du aktuell einfach von Informationen erschlagen wirst, weil der Schritt zu Java EE einfach zu groß ist.



Dimax hat gesagt.:


> Übrigens das Programm heist ab jetzt fantastico.Programm..nichts mehr mit sasco oder fiasco


----------



## Dimax (14. Nov 2018)

mihe7 hat gesagt.:


> Du übernimmst Dich aber anscheinend dabei, weil der Schritt zu einer Java EE Anwendung zu groß ist. Genauso wie es hier einige gibt, die Java programmieren lernen wollen und meinen, sie machen das am Besten mal eben mit einem Spiel (natürlich mit grafischer Oberfläche) und ziehen sich dann noch ein YouTube-Tutorial rein, das alles vereint, was man nicht machen sollte.
> 
> In Anbetracht der Beiträge auf den letzten sechs Seiten hättest Du z. B. selbst wissen müssen, wie das src-Attribut aussehen muss. Ich denke mal, dass Du aktuell einfach von Informationen erschlagen wirst, weil der Schritt zu Java EE einfach zu groß ist.


Und welchen Rat hätest du gegeben? Anderen Beruf wählen,Grundlagen lernen ,Selbstmord ,dem Nachbar auf die Schnauze ? oder etwas anderes?


----------



## mihe7 (14. Nov 2018)

Dimax hat gesagt.:


> Und welchen Rat hätest du gegeben?


Naja, bevor ich anfange, Web-Anwendungen zu entwickeln würde ich mir mal ansehen, wie z. B. Webseiten funktionieren, wie URLs aufgelöst werden etc. Kurz:


Dimax hat gesagt.:


> Grundlagen lernen


----------



## Dimax (14. Nov 2018)

und vielleicht ein paar Namen oder Links..könnte sein das ich die noch nicht gelesen habe
bin grade dabei Das umfassendes Java EE Handbuch zu lesen ca 800. Seten ..genaue Namen kann nicht sagen ist zu Hause.Vor Kurzem gelesen HTML und CSS Praxisrezepte für Einsteiger von Robert R.Angular(finde ganz gut )
und Das Grose Java OCP/OCA  vorbereitungs-Buch (ist auch ok) und
Entwickeln und Bereitstellen von Anwendungssystemen von K.Ringhand/H.-G.Wittman(finde nicht gut/zu oberflächlich)
und so ein paar Bücher zum Thema InternetSecurity,Java ist auch eine Insel,Internet-Technologien der Zukunft(1999 ein bisschen zu alt) von Addison-Wesley..usw


----------



## mihe7 (14. Nov 2018)

Grundlagen lernen heißt ja nicht, dass man sich die nächsten drei Jahre lang kiloweise irgendwelche Bücher reinziehen muss. 

Es geht um ganz einfache Dinge: wie funktioniert HTTP, wie funktionieren URIs/URLs, wie arbeitet ein Browser. Dabei muss man auch nicht immer bis ins letzte Detail gehen. Wichtig ist, dass man die Zusammenhänge versteht. Das kann man auch sehr gut selbst "erforschen". Das sind ein paar Basics, die man neben HTML/CSS meist schon für die Erstellung statischer Webseiten benötigt. Ein wenig Wissen über TCP/IP schadet natürlich auch nicht.

Bei Webanwendungen kommen weitere Dinge dazu, wie z. B. Session Management, Security, DB-Anbindung, AJAX usw. 

Es baut alles aufeinander auf, daher würde ich mal behaupten, dass es fast ein Ding der Unmöglichkeit ist, ohne diese Kenntnisse eine Java EE-Anwendung hinzuzaubern, die weit über ein Hello World hinausgeht.


----------



## Dimax (14. Nov 2018)

mihe7 hat gesagt.:


> wie funktioniert HTTP, wie funktionieren URIs/URLs, wie arbeitet ein Browser.
> Ein wenig Wissen über TCP/IP schadet natürlich auch nicht.


 Das habe ich hier`,Internet-Technologien der Zukunft(1999 ein bisschen zu alt) von Addison-Wesley..usw` und hier :`Entwickeln und Bereitstellen von Anwendungssystemen von K.Ringhand/H.-G.Wittman(finde nicht gut/zu oberflächlich)`)


mihe7 hat gesagt.:


> Bei Webanwendungen kommen weitere Dinge dazu, wie z. B. Session Management, Security, DB-Anbindung, AJAX usw.


Session Management, Security,AJAX usw. Das fehlt mir,,paar Gute quellen als Rat?


----------



## Dimax (14. Nov 2018)

mihe7 hat gesagt.:


> In einem Forum, in dem sich alle Duzen, (plötzlich?) jemanden zu Siezen, ist jetzt nicht der Knaller.





Dimax hat gesagt.:


> Herr Flown  was sagen Sie dazu -> https://www.java-forum.org/thema/probleme-mit-java-in-jsp.182910/





Dimax hat gesagt.:


> Herr mrBrown danke für so eine tolle Motivierung ..jetz weiss ich was ich machen muss..button clicken lehrnen gehen))



Verstehe nicht wo der Unterschied ist..wenn doch..Entschuldigung Jungs ich wollte keinen beleidigen..Wollte nur so mein Respect zeigen.


----------



## mihe7 (14. Nov 2018)

Du schreibst z. B. einerseits von "Jungs" und dann wieder "Herr" und "Sie". Das passt nicht zusammen. Ich merke mir einfach, dass Du manchmal Siezt und gut ists.



Dimax hat gesagt.:


> Das fehlt mir,,paar Gute quellen als Rat?


Google ist dein Freund. Ich kann Dir zum Thema keine Bücher nennen, weil ich keine kenne. Ich lese Spezifikationen (API-Dokus, RFCs, ...). Wikipedia leistet auch gute Dienste. Ansonsten findet man entsprechende "Hinweise" via Google.


----------



## Dimax (20. Nov 2018)

Jetzt habe ich dass gelöst ohne js und (hoffentlich wird mrBrown nicht schimpfen) mit iframes))
das ist die Seite wo alles aufgerufen wird:

```
.....
out.print("</tr></table><br /><br />");%>
    <%
    out.print("<iframe  width=\"45%\" height=\"600\" style=\"border:3px solid green;\" src=\"Chart.jsp\"></iframe>");....
```

das ist die Seite mit den Bildern

```
.......
<div id="mainContainer">
        <div class="simpleTabs">
            <ul class="simpleTabsNavigation">
            <li><a href="#fragment-1"><span style="font-size: 10px;">Top Komplexität</span></a></li>
            <li><a href="#fragment-2"><span style="font-size: 10px;">Top Aufwand</span></a></li>
            <li><a href="#fragment-3"><span style="font-size: 10px;">Top Lesbarkeit</span></a></li>
            <li><a href="#fragment-4"><span style="font-size: 10px;">Top Länge</span></a></li>
            <li><a href="#fragment-5"><span style="font-size: 10px;">Bottom Komplexität </span></a></li>
            <li><a href="#fragment-6"><span style="font-size: 10px;">Bottom Aufwand</span></a></li>
            <li><a href="#fragment-7"><span style="font-size: 10px;">Bottom Lesbarkeit </span></a></li>
            <li><a href="#fragment-8"><span style="font-size: 10px;">Bottom Länge</span></a></li>
        </ul>
        <div class="simpleTabsContent" id="fragment-1">
            <img src="/sasco/daten.einlesen/TestChart?aktion=topKomplex" 
            width="80%" height="80%" style="display:block ;margin-left:auto; margin-right:auto;margin-top:2%;" >
        </div>......usw
```
also funktioniert ohne Probleme ,dynamisch und blitzschnell ohne die Seiten neue laden
danke an alle die mir geholfen haben.


----------



## mihe7 (20. Nov 2018)

Dimax hat gesagt.:


> hoffentlich wird mrBrown nicht schimpfen


LOL - der böse @mrBrown, der reißt Dir jetzt bestimmt den Kopf ab


----------

