JavaEE Backend < > HTML Frontend ( Frameworks )

Chris81T

Mitglied
Hallo,

ich hoffe, ich schreibe hier ins richtige Forum (ansonsten bitte verschieben, danke). Wie soll ich beginnen: Ich arbeite im JavaEE Umfeld und Techniken wie JSF (Umsetzung mittels XHTML) sind mir bekannt.

Nun würde ich gerne mit HTML(5) WebContent bereitstellen (typische Webseiten mit vielen Besuchern / keine gezielte Web- Anwendung für vereinzelnde Anwender), welche über EJB's (Services - Businessschicht) ihren Inhalt beziehen (Beispiel: Weblog = Die konkreten Artikel / Kategoriendaten usw. werden in einer DB gehalten, mittels JPA angesprochen und über die Businessschicht bereitgestellt).

Nun hab ich das Direct Web Remoting ( DWR ) Framework gefunden, welches über JavaScript Java- Klassen ansprechen kann. Zum Beispiel dann Delegate Klassen, welche mittels eines lookup's Zugriff auf die Service- EJB's bekommen. Nun ist sowas bestimmt nicht Ziel der Sache, dass der eigentliche Inhalt (Artikelübersichten/inhalte usw) erst nachträglich vom Client via JS geladen werden. Solche Sachen sollten schon im HTML statisch/serverseitig vorhanden sein. Ich habe schon mal eine Teststellung umgesetzt, die außerdem auch bei noch nicht viel Inhalt zeigt, dass die Seite merkbar sich so nach und nach aufbaut (ich hätte eher gedacht, dass das erst mit aufwendigeren Ereignissen / viel dynamischen Inhalt eintritt) und sich nicht "aus einem Guss" anfühlt.

Auch kommt hinzu, dass es Komponenten gibt, die auf vielen HTML Seiten identisch sind (zB header, footer). Nach dem DRY Prinzip wünscht man sich eine Möglichkeit, HTML Fragmente zu includieren. Es gibt zum Einem die Server-Side-Includes (sind schon was ältere Techniken?!) und Client-Side-Includes. Da ich nichts passendes zu SSI gefunden habe, hab ich mit jQuery ( load() ) eine Lösung gefunden, um HTML Fragmente in das eigentliche HTML Dokument zu integrieren.

Also wäre hier nun ein Web- Framework a'la Ruby on Rails, Django (Python) eher sinnvoll. Da es ja jRuby und Jython gibt, könnte eine Anbindung zwischen einem solchen Framework und der JavaEE Welt (JNDI lookup auf eine EJB) möglich sein?! Hat das jemand schon einmal gemacht (oder Ähnliches)?

Vielleicht kennt einer von euch Frameworks, welche mit Java direkt kommunizieren können (ansonsten wären WebServices eine weitere Möglichkeit) und HTML Content behandeln können, Templating Mechanismen beherrschen.

Pseudo Code Beispiel für ein event. Framework:
HTML:
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>HTML Page</title>
 </head>
 <body>
  {% include html header fragment %}

  <div>
   some information's...
  </div>
  
  <section>
   {% call some script function, which provides html content by using EJB services / server-side %}   
  </section>
  
  <div id="nav">
   <a href="...">
   ....
  </div>
 </body>

Alle weiteren Sachen könnten dann mittels HTML5 / JavaSript / jQuery clientseitig gelöst werden ( Effekte, GUI Validierung, komplexere Komponenten (zB. DatePicker) )

Falls jemand Erfahrungen mit einer solchen Thematik, bzw. Tipps hat und/oder solche Frameworks kennt, bitte antworten ;-)

Vielen Dank!!

PS: Mir ist klar, dass man für einen Weblog nicht einen JavaEE AppServer benötigt und das einfacher lösen kann, es geht mir nur um ein Beispiel um zu prüfen, was es für Möglichkeiten gibt.
 

schalentier

Gesperrter Benutzer
Ich wuerd sagen, REST ist hier das passende Stichwort. Jede Ressource deiner Anwendung (also letzlich jedes Businessobjekt) bekommt eine definitierte URL, ueber die man auf die Ressource per HTTP zugreifen oder sie veraendern kann (GET, PUT, POST, DELETE). Den Datenaustausch koennte man sinnigerweise mittels JSON realisieren, das kann man super auf dem Client mit JS/jQuery weiterverarbeiten.

Was JEE hier konkret bietet weiss ich nicht. Mit Ruby (on Rails oder Rack) geht das natuerlich super. Mit jRuby kannst duch auch EJB benutzen, nur macht das imho nicht wirklich viel Sinn (hoechstens wenn man einen Wrapper fuer eine EJB Legacy App bauen will).

Bedenken sollte man in jedem Fall, dass durch so eine Architektur der Server tendenziell (deutlich) mehr Request bearbeiten muss, die allerdings weniger Daten zurueckliefern. Dafuer kannst du den gesamten statischen Content direkt von einem z.B. Lighttp sauschnell senden.

Grad im Umfeld von Ruby bietet sich ein solches Verfahren aber an, da dort die allermeiste Performance fuer das Zusammenbauen der HTML-Views drauf geht.
 

Chris81T

Mitglied
Ich wuerd sagen, REST ist hier das passende Stichwort. Jede Ressource deiner Anwendung (also letzlich jedes Businessobjekt) bekommt eine definitierte URL, ueber die man auf die Ressource per HTTP zugreifen oder sie veraendern kann (GET, PUT, POST, DELETE). Den Datenaustausch koennte man sinnigerweise mittels JSON realisieren, das kann man super auf dem Client mit JS/jQuery weiterverarbeiten.

Was JEE hier konkret bietet weiss ich nicht. Mit Ruby (on Rails oder Rack) geht das natuerlich super. Mit jRuby kannst duch auch EJB benutzen, nur macht das imho nicht wirklich viel Sinn (hoechstens wenn man einen Wrapper fuer eine EJB Legacy App bauen will).

Bedenken sollte man in jedem Fall, dass durch so eine Architektur der Server tendenziell (deutlich) mehr Request bearbeiten muss, die allerdings weniger Daten zurueckliefern. Dafuer kannst du den gesamten statischen Content direkt von einem z.B. Lighttp sauschnell senden.

Grad im Umfeld von Ruby bietet sich ein solches Verfahren aber an, da dort die allermeiste Performance fuer das Zusammenbauen der HTML-Views drauf geht.

Vielen Dank für die Antwort!

Lighttpd kannte ich noch gar nicht. Ich darf mal zusammenfassen um zu schauen, ob ich es richtig verstanden habe:

( Ich greif das Blog-Beispiel nochmal auf ) Du würdest keine EJB in der Business-Schicht zur Verfügung stellen, sondern die Kommunikation zum Frontend mit REST aufsetzen ( letztendlich sind das auch @WebServices, die für die Businessfunktionen umgesetzt werden ?!?! - habe mit REST keine Erfahrung. Muss ich mir mal anlesen ). Das Backend / Business mit dem WebService läuft zB. auf dem JavaEE AppServer.
Nun würdest du einen weiteren Server Lighttp einsetzen, welcher die eigentlichen Client-Anfragen (n Benutzer, welche auf den Blog zugreifen) übernimmt. Dieser ist mit nem Web Framework (zB Rails) gekoppelt, welcher sich um den dynamischen HTML Content kümmert; letztendlich sollten die Inhalte für Artikel schon serverseitig ins HTML includiert werden.
Oder hattest du das eher so gemeint, dass der Client die HTML Seite lädt, darin dann erst mit JS/jQuery die Anfragen an die REST-Business-Schicht gemacht werden, um zB. den Übersichtsinhalt von Blog-Artikeln zu laden? Aber eigentlich ist es doch besser, den konkreten Inhalt ( auch welcher aus zB ner DB kommt ) schon für den Client "statisch" im HTML zu haben.

...

Mir fehlt einfach noch was "Wissen" zu REST. Ist dieses Konzept denn eine gängige Herangehensweise? Auch ausgelegt für Massenzugriffe? ( ich habe mich im Frontend-Bereich vorrangig durch die Arbeit mit JSF gekoppelt mit einem aufsetzenden Framework (ICEFaces, Primefaces...) beschäftigt, welches sich teils schon "schwer" serverlastig anfühlt. Also für Unternehmensinterne Webapplikationen voll in Ordnung, aber für die Masse... )

Anders gesagt. Ich habe ein gesetztes JavaEE Backend/Businesslogik Enterprise Application. Nun suche ich die beste Vorgehensweise ein professionelles Frontend (geeignetes Framework) aufzusetzen (ggf. durch einen weiteren Server wie der genannte Lighttp), was für den öffentlichen Massenzugriff angedacht ist.

Man merkt, ich habe da noch einige ? stehen. Deshalb freue ich mich sehr über Antworten und Anregungen. Es gibt halt viele verschiedene Techniken, die man sich aber nicht alle auch aus zeitlichen Gründen tiefgehends anschauen kann. Deswegen ist es schon gut, durch Erfahrungen anderer ein paar Vorschläge zu erhalten, wo man dann selbst gezielter weiterschauen kann...
 

schalentier

Gesperrter Benutzer
Ich glaube mit meiner Antwort hab ich eher Verwirrung gestiftet.

Zunaechst mal ist mir noch bisschen unklar, was du eigentlich vorhast. Normalerweise wuerde ich sagen, entscheide dich fuer eine Plattform/Technologie und nutz die komplett (bei JEE wahrs. JSF oder so - aber in diesem Umfeld kenn ich mich nicht besonders gut aus). Das Mischen verschiedener Frameworks, auch noch in verschiedenen Sprachen entwickelt, wuerd ich nicht empfehlen. Sowas kann man evtl. machen, wenn man alle Technologien ordentlich beherrscht und entsprechende Erfahrungen gesammelt hat - um sich aus allen die jeweiligen Vorteile rauszupicken. Das ist aber alles andre als trivial.

Lighttp ist uebrigens ein kleiner aber superschneller Webserver, zum Ausliefern von statischem Content (Bilder, statisches HTML, JavaScript-Libraries, etc). Der hat nix mit dynamischem Zeug zu tun.

Ich seh zwei potentielle Wege:
1. "klassisch": Dein Server sendet zu einer HTTP Anfrage ein komplettes HTML zum Client. Serverseitig haste dann sinnigerweise ein Backend (z.B. EJB) und ein Frontend (z.B. JSF). Ein Request holt sich dann die benoetigten Daten aus dem Backend und steckt sie ins Frontend, woraus dann HTML generiert wird, was zum Client geschickt wird. Dieses HTML ist dynamisch, weil der Server das fuer jeden Request neu zusammenbauen muss.

2. REST, Web2.0, AJAX (nenns wie du willst): Die HTTP Anfrage wird von einem vorgeschalteten Server mit einer statischen HTML Seite und viel JavaScript beantwortet. Im Browser am Client laed das JavaScript nun per AJAX/jQuery die eigentlichen Inhalte der Seite und baut sie in das statische HTML ein.

Natuerlich koennen beide Wege beliebig miteinander kombiniert werden (was die Programmierung aber nicht unbedingt vereinfacht). Mit Weg 2 spart man Rechenpower auf der Serverseite, da viel Arbeit einfach zum Client verlagert wird.

---

Deine eigentliche Frage kann man mit den gegebenen Informationen nicht wirklich sinnvoll beantworten. Im Zweifel wuerd ich zuerst mal ein paar Lasttests gegen die vorhandene Architektur fahren, um zu sehen wo es wirklich hakt. Vielleicht reichts dann aber auch, fuer den oeffentlichen Massenzugriff fertig vorgerenderte (dann statische) HTML Seiten auszuliefern? Das koennte dann ein normaler Apache (oder eben Lighttp) uebernehmen. Das nennt man uebrigens Caching. Bei JEE/JSF bin ich mal wieder ueberfragt, bei Ruby on Rails ist das ziemlich schick und einfach geloest (man schreibt an die HTML Views (oder Teile) nur dran, "bitte cache das bis dann-und-dann").

Von wievielen Zugriffen reden wir eigentlich? Und wie oft aendert sich eine HTML Seite? Ist da viel dynamisches Zeug drauf? Was genau ist fest vorgegeben und wo kannst du ueberhaupt dran drehen?
 

Chris81T

Mitglied
Hallo schalentier,

Zunaechst mal ist mir noch bisschen unklar, was du eigentlich vorhast. Normalerweise wuerde ich sagen, entscheide dich fuer eine Plattform/Technologie und nutz die komplett (bei JEE wahrs. JSF oder so - aber in diesem Umfeld kenn ich mich nicht besonders gut aus). Das Mischen verschiedener Frameworks, auch noch in verschiedenen Sprachen entwickelt, wuerd ich nicht empfehlen. Sowas kann man evtl. machen, wenn man alle Technologien ordentlich beherrscht und entsprechende Erfahrungen gesammelt hat - um sich aus allen die jeweiligen Vorteile rauszupicken. Das ist aber alles andre als trivial.
Generell bin ich aktuell nur am recherchieren, was für Techniken möglich sind. Was habe ich (in nah-ferner) Zukunft vor: Wahrscheinlich eine öffentliche Website/Portal erstellen, welche für die Masse zur Verfügung stehen soll. Dabei wird es nicht nur um stupide Speichern von erstellten Artikeln oder so gehen. Dafür könnte man auch einfach ein CMS nehmen... Da ich ich mich im JavaEE Umfeld heimisch fühle, ist das ganz klar mein gesetztes Framework für's Backend. Ja, du hast recht, es ist im EE Umfeld aktuell JSF2.0. Ich sehe dieses Framework nicht ganz für diese Aufgabe (setzen es im Unternehmen für firmeninterne Applikationen ein, wofür es ok ist). Ich denke, da gibt es bessere Technologien, bzw. versuche es herauszufinden (event. irre ich mich auch). Gestern bin ich zufällig auf ein Video aufmerksam gemacht worden, indem James Gosling selbst nicht wirklich positiv über JSF redet. Quelle: James Gosling on Apple, Apache, Google, Oracle and the Future of Java - YouTube
Nun gut, die Techniken sollen ja nicht ineinander verzahnt sein/werden, sondern die eine Frontend-Technik soll die bereitgestellten Funktionen der anderen Backend-Technik nutzen. Wenn dies sauber umgesetzt ist, sehe ich erst einmal nicht so gravierende Probleme, bzw. es würde sich bei einem Prototypen zeigen.

Bevor ich RoR mir näher anschaue, werde ich erstmal mir Grails anschauen. Gehen ja ca. den gleichen Weg, setzen aber Groovy ein, welche ja eh für die JVM vorgesehen ist.

Es wird sich zeigen...
 

JanHH

Top Contributor
So rein aus Neugierde, was unterscheidet Deine Anwendung denn von einer "ganz normalen" JEE-Webanwendung, wo man eine solche Seite samt Inhalt problemlos mit JSF realisieren kann? Für mich klingt das alles ganz normal..

Hab ansonsten grad selber was implementiert wo per jsf/ajax ein Servlet einen Request bekommt und daraufhin ein Objekt in JSON-Form zurückliefert, welches der Client dann auswertet (und in unserem Fall in google api-Charts verwandelt). Sowas vielleicht?
 
Zuletzt bearbeitet:

DerFeivel

Bekanntes Mitglied
Wenn ich deinen Eingangpost richtig verstehe, hast du 2-3 'Probleme':


Problem 1:

Du suchst ein Templating-Framework, um häufig verwendete HTML-Konstrukte möglichst nur an einer Stelle pflegen zu müssen.

Problem 2:

Du benötigst ein Framework/Technologien, um Daten aus deinen EJB dynamisch in deine HTML-Seiten einzubauen.

Problem 3:

Du benötigst ein Framework/Technologien, um Daten dynamisch nachzuladen.



Die Probleme 1 & 2 lassen sich relativ elegant überApache Velocity lösen. Hierbei handelt es sich um eine Template-Engine, mit der Java-Objekte über Platzhalter in beliebigen Textdateien (also auch HTML) bekannt gemacht werden können.


Problem 3 klingt dann nach einem klassischen Fall für Ajax+Rest
 

Chris81T

Mitglied
Sorry,

habe gerade erst jetzt eure Antworten gelesen. Apache Velocity kannte ich auch noch nicht. Laut den News-Einträgen tut sich da aber auch nicht mehr viel. Letzter News Eintrag ist von 2010.

Vielen Dank euch allen!
 

krazun

Bekanntes Mitglied
Sorry,

habe gerade erst jetzt eure Antworten gelesen. Apache Velocity kannte ich auch noch nicht. Laut den News-Einträgen tut sich da aber auch nicht mehr viel. Letzter News Eintrag ist von 2010.

Vielen Dank euch allen!

Ich würde die FreeMarker template engine empfehlen. Ziemlich aktuell: 29 Feb 2012: FreeMarker 2.3.19 was released

und eine kleine Übersicht warum FreeMarker besser ist als Velocity: FreeMarker: Java Template Engine Library - FreeMarker vs. Velocity

Oder mach es einfach mit ganz normalen JavaEE 6 Techniken und migriere später auf JavaEE 7. Dort soll HTML5 nämlich eine große Rolle spielen.

grüße,
krazun
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Stand von JavaEE und AppServern Allgemeines EE 10
L JavaEE Webanwendung - Datenbank-Verbindung aufbauen Allgemeines EE 18
G Unit Test einer JavaEE Anwendung schlägt fehl. JNDI Name nicht gefunden. Allgemeines EE 3
G JavaEE Anwendung Testen Allgemeines EE 0
R Wiederverwendbarkeit in JavaEE Anwendung Allgemeines EE 2
P JavaEE 7 Maven Eclipse Allgemeines EE 0
OnDemand GUI in einer JavaEE Anwendung Allgemeines EE 6
P JAvaEE und JNDI Allgemeines EE 0
P JavaEE- Projekt in Netbeans Allgemeines EE 0
T JBossESB Welche JavaEE Verison? Allgemeines EE 0
J Netbeans + JavaEE. NullPointerException Allgemeines EE 3
S Verteilte Anwendung mit JavaEE Allgemeines EE 3
J Security JavaEE 6 Allgemeines EE 7
H Die ersten Schritte mit JavaEE Allgemeines EE 2
M JavaEE Anwendung weitergeben Allgemeines EE 24
R Synchronized in JavaEE Allgemeines EE 11
G web.xml javaee tag Allgemeines EE 2
G Aussagen zu JavaEE Allgemeines EE 9
D maven für javaEE projekt Allgemeines EE 20
T javaee.jar und rt.jar Allgemeines EE 2
G Netbeans und JavaEE - Projects Allgemeines EE 4
G Von Java SE nach JavaEE umsteigen Allgemeines EE 31
L Button Handling in JSP mit Java-Backend Allgemeines EE 2
G Was bedeutet Backend und Frontend Allgemeines EE 6
J JSF JSF in statisches HTML einbinden Allgemeines EE 1
R HTML Formular Allgemeines EE 3
P Daten von HTML and JSP schicken Allgemeines EE 0
T Fertiges html javascrip css template in java EE application Allgemeines EE 0
3 HTML Positionen herausfinden Allgemeines EE 3
G Aktualisieren -> HTML- Page Allgemeines EE 5
neurox HTML decoder Allgemeines EE 2
Lex Property per html:link schreiben in struts Allgemeines EE 2
M HTML Code im Output unvollständig Allgemeines EE 9
G JSF <h:outputText> mit HTML ? Allgemeines EE 3
T Methodenaufruf (der HTML erzeugt) innerhalb von JSP Allgemeines EE 5
J Encoder für Java String in html format Allgemeines EE 6
R [JSF] HTML aus JavaBean generieren Allgemeines EE 8
I <%@ taglib uri="[url]http://java.sun.com/jsf/html"[/url] p Allgemeines EE 6
S JSF - Ressourcenbundle-Text als HTML ausgeben Allgemeines EE 1
N Nutzer kann Html-Komponente selbst bestimmen Allgemeines EE 3
M HTML Sonderzeichen und JSF Allgemeines EE 2
R Bilder in HTML Tabelle ermitteln Allgemeines EE 2
Z HTML-Formulare (Feldinhalt) mit JSP abfragen/verarbeiten Allgemeines EE 7
M datei liste (jsp,html) von einem Server Allgemeines EE 4
N Struts - Problem mit <html:link> Action Allgemeines EE 3
W HTML deaktivieren Allgemeines EE 3
clemente API zurm Generieren von HTML Code Allgemeines EE 6
T HTML-FormularDaten in JavaBean Allgemeines EE 4
C Problem mit html:optionsCollection Allgemeines EE 4
F JSP und HTML Allgemeines EE 33
K Struts html:messages tag Allgemeines EE 2
A HTML Tags filtern Allgemeines EE 4
S String escpapen für JavaScript, Datenbank, HTML Allgemeines EE 2
V JSP + Funktionen die HTML Code enthalten Allgemeines EE 4
T JSF, Tiles und normales HTML in <f:verbatim> Tags? Allgemeines EE 2
M HTML-Klassen Allgemeines EE 2
clemson HTML Taglib - mehrere Submit-Buttons & Internationalisie Allgemeines EE 4
R html-form mit bean:write Allgemeines EE 10
R HTML parsen mit Servlet Allgemeines EE 2
M Fehler aufruf von Index.html Allgemeines EE 7
clemson [Struts] HTML-Checkbox Tag ID Allgemeines EE 2
G HTML Code an JSP übergeben Allgemeines EE 7
G "HTML-Umlaute" in lesbaren String umwandeln Allgemeines EE 10
R Konvertierung Internetexplorer Java (CP1252 -> HTML Entit Allgemeines EE 12
G <html:radio Allgemeines EE 17
A struts: html:form-tag das Attribut "name" ersetzen Allgemeines EE 7
V <html:radio property="auswahl" value="E1&q Allgemeines EE 2
G Struts <html:img /> ? Allgemeines EE 6
R HTML CODE EINER SITE AUSLESEN Allgemeines EE 2
A mit JavaMail eine html mail versenden? Allgemeines EE 4
A Leerzeilen in HTML-Seite, nach Erzeugen des Servlets Allgemeines EE 3
D HTML-Code von JSP wird in Browser nicht angezeigt?! Allgemeines EE 3
B jsp include von html-datei mit javascript abfrage Allgemeines EE 8

Ähnliche Java Themen

Neue Themen


Oben