# Berechnen und Anzeigen von Formeln aus der Chemie und Physik mit JSP und Bean



## Bober (25. Jun 2012)

Hallo,

ich möchte mittels einer JSP und Java Bean ermöglichen, dass Anwender zu verschiedenen Phänomenen aus der Chemie Modelle berechnen können (hintergrund eigentlich völlig egal).

Dafür benötigt werden:

1. Anzeige Eingabe
- Eingabefelder für die relevanten Variablen des jeweiligen Modells
- Submittbutton zur Berechnung

2. Berechnung
-"Schicken" der werte an eine Java Bean und verarbeitung der Werte nach den Regeln bestimmter Formeln
- Generieren von Grafiken, Diagrammen, Graphen
- "Zurückschicken" der Ergebnisse und der Grafiken, Diagrammen, Graphen

3. Anzeige Ergebnis
- Anzeigen der neuen Werte
- Anzeigen der Grafiken, Diagrammen, Graphen


Mein Problem besteht nun darin, dass ich nach bestimmten Vorgaben Diagramme generieren lassen muss und diese dann auf der JSP angezeigt werden sollen. (Graphen oder Modelle von Schockwellen usw.)
Wie realisiere dies am besten?

Ich habe bisher mit der Bibliothek JFreeChart herumprobiert, habe bisher jedoch noch keine kommunikation bezüglich der Diagramme zwischen JSP und Bean zu stande bekommen. (hier die Frage, wie dies am besten realisiert wird? BufferedImage?)

Über Vorschläge/Anregunden würde ich mich sehr freuen.


Gruß,

Bober


----------



## Birne140787 (26. Jun 2012)

Displaying dynamic charts in a web page (using JFreeChart & JSP)  a cup of java

Mittel einer solchen JSP im src Attribute des Image Tags. In der JSP wird das Diagramm erstellt und rausgestreamt


----------



## Bober (26. Jun 2012)

danke für die Antwort, vll komme ich damit weiter.

Die genaue Problemlösung ist es jedoch nicht, da ich das Diagramm wie gesagt nich in einer JSP, sondern in einer Bean bzw. vll sogar noch dahinter in einer "normalen" Java Klasse erstellen möchte, und es dann an die JSP, die es anzeigt, übergeben möchte.


----------



## Bober (26. Jun 2012)

also nochmal um es zu verdeutlichen:

Das Diagramm zu erstellen ist (im moment noch) nicht das Problem. Viel mehr ist die Interaktion zwischen JSP und Java Bean ein Problem.

Ich will in einer Java Bean z.B. ein BufferedImage. Dieses will ich nun auf einer JSP in einem bestimmten Bereich anzeigen lassen.

Mein bisheriger versuch was der, eine JSP so zu definieren, dass ich sie in einer anderen JSP in dem <img> Tag aufrufen kann:

Aufruf: 
	
	
	
	





```
<img src="Graph.jsp" alt="Graph" />
```

Graph.jsp:


```
<%@ page contentType="image/jpeg" %><%@
    page import="java.awt.*,java.awt.image.*, com.sun.image.codec.jpeg.*" %>
    
<% 	

	int width  = 200, height = 200;
	BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB );
	Graphics g = image.getGraphics();
	g.setColor( Color.white );
	g.fillRect( 0, 0, width, height );
	g.setColor( Color.blue );
	g.drawLine( 0, 0, 200, 200 );
	g.drawLine( 0, 200, 200, 0 );
	g.dispose();
	
	ServletOutputStream sos = response.getOutputStream();
	JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder( sos );
	encoder.encode( image );
%>
```

Somit habe ich ein "X" als Bild auf die JSP gemalt, die mittels <img> Tag die andere JSP aufruft. (Quelle: Java Insel)

Sobald ich in diese jsp, die das Bild zeichnet, nun jedoch eine Bean einbinden will, geht nichts mehr...

Meine Frage jetzt also wie stelle ich am besten diese Kommunikation her, um in einer Java Bean ein Bild zu erzeugen, und dies auf einer JSP anzuzeigen. 
(Kann auch ein völlig anderer Ansatz als meiner sein)


----------



## reNur (26. Jun 2012)

Ich habe mir vor kurzem mal primefaces (also JSF) angeschaut - und da gibt es schöne Tabellen/Diagramme, die man nach extrem kurzer Einarbeitungszeit benutzen kann...
Oder muss es zwingend JSP sein?


----------



## Bober (27. Jun 2012)

hallo reNur,

nein, es muss nicht zwingend JSP sein. Nur mit JSP habe ich bisher schon gearbeitet, daher wäre mir dies lieber.
Falls du bezüglich den JSF einen Vorschlag hast, werde ich dies aber auch gerne ausprobieren...


----------



## Bober (27. Jun 2012)

ich denke es muss doch irgendwie gehen, ein BufferedImage aus einer Bean auf einer JSP anzuzeigen...


----------



## reNur (27. Jun 2012)

Was für Grafiken brauchst du denn? Bei JSF-Framework - wie z.B. primefaces - hättest du schon eine reihe von Diagrammen (Balken, Kuchen etc.) dabei, du du sehr einfach in Verbindung mit einem EJB-Aufruf füllen kannst.
Hier ein paar Beispiele:
PrimeFaces - ShowCase
PrimeFaces - ShowCase
PrimeFaces - ShowCase

JSP ist halt so gut wie tot und imo auch schon im Ganzen als deprecated gekennzeichnet.


----------



## Fant (27. Jun 2012)

Ganz so einfach ist das mit reinem JSP/JSF nicht. Einfacher und sauberer ist es vermutlich ein Servlet zu schreiben, welches dir deine gewünschte Grafik ausgibt, und in deiner JSP in etwa einem image-Tag dann auf das Servlet zu verweisen.

JSP ist mMn aber längst überholt. Wenn du in einem Projekt arbeitest, in dem es noch verwendet wird, dann ist das sicher ein Grund sich da tiefer einzulesen. Wenn du aber für dich selbst etwas neues entwickelst, dann würde ich doch ebenfalls eher zu JSF raten. Da gibt mittlerweile auch einige recht mächtige Komponentenframeworks.
Wenn dir die bereits vorgeschlagenen fertigen Charts, die primefaces mit ausliefert nicht ausreichen, dann hast du dort auch auf sehr einfache Weise die Möglichkeit direkt dein eigenes BufferedImage auszuliefern: PrimeFaces - ShowCase


----------



## Birne140787 (27. Jun 2012)

In einen OutputStream, der bereits mit der Ausgabe einer HTML-Seite (Text) belegt ist, ein Image rendern. Somit kannst du das nur über das Anfordern des Image in einem src-Attribut des IMG-Tag


----------



## Bober (27. Jun 2012)

ich werde den Vorscvhlag mit Servelet und JSP mal versuchen. Außerdem schaue ich mich mal bei JSF um, jedoch habe ich da bisher noch gar keine Erfahrung und müsste bei null anfangen, inklusive Projekte aufsetzen usw...


----------



## Birne140787 (27. Jun 2012)

JSF ändert daran überhaupt nichts, da dies eine Frage der funktionsweise des Internet ist.


----------



## Bober (28. Jun 2012)

was meinst du birne?


----------



## Birne140787 (28. Jun 2012)

Das Konzept ist eine Anfrage an den Server (Request) und eine Antwort des Servers (Response). Wenn du von einem Server mittels eines URL eine Resource anforderst, teilt der Server dem anfordernden Client mit, um was für eine Art Resource es sich handelt (MimeTyp). Im Falle einer JSP-Seite, die das HTML für den Client enthält eben "text/html". Der Client kann anhand des Types nun entscheiden, was er mit dem Inhalt machen soll; bsp. rendern oder downloaden. Fordert der Client im Zuge des parsens des HTML-Quelltextes eine Grafik an, weil er im src-Attribut des IMG-Tag eben den Verweis auf eine Grafik gefunden hat, so wird als MimeTyp eben "image" übermittelt.

Du kannst eben nicht im einem Outputstream, welcher für "text" geöffnet ist einfach mal ein "image" rein- oder zwischenschieben. Dabei ist es egal, ob die HTML-Seite von einem Servlet oder einer JSP erzeugt wird (da die JSP zu einem Servlet compiliert wird, ist es eh das Gleiche). Der Weg ist alos, der Aufruf eines Servlet, dass die Grafik - wie auch immer erzeugt - im src-Attribut des IMG-Tag aufgerufen wird.


----------



## Fant (28. Jun 2012)

Mit einem StreamedContent von primefaces geht's aber viel bequemer 

Dabei wird Content und MimeType als String an den Client ausgeliefert. Anschließend wird implizit ein zweiter Request ausgelöst, in dem entsprechend des zuvor  (in String-Form) überlieferten MimeTypes und Content dann z.B. ein Bild nachgeladen wird. Jedenfalls ungefähr. Der Anwender braucht dann nur seine JSF + BackingBean, nichts weiter.
ViewScope geht damit dann natürlich nicht mehr.


----------

