Servlet-Klassen und Templates trennen?

Status
Nicht offen für weitere Antworten.

deamon

Bekanntes Mitglied
Servlet-Klassen und Templates trennen?

Hallo,

ich habe schon öfter gehört, dass man (Servlet-)Klassen und Templates in zwei parallele Verzeichnisbäume trennen sollte.

Beispiel (ausgehend von einem Maven-Archetype):
Code:
MeineAnwendung/
  src/
    main/
      resources/
        com/
          firma/
            projekt/
              HalloWelt.class
      webapp/
        WEB-INF/
          templates/
            com/
              firma/
                projekt/
                  HalloWelt.tpl

Ich frage mich jedoch ernsthaft, was der Vorteil davon sein soll. In jedem Fall hat man davon den Nachteil, dass man zwei Verzeichnisstrukturen aufbauen und pflegen muss und dass man öfter zwischen beiden hin und her wechseln muss. Außerdem finde ich das noch unübersichtlicher.

Die Alternative wäre eine Struktur für beides:
Code:
MeineAnwendung/
  src/
    main/
      resources/
        com/
          firma/
            projekt/
              HalloWelt.class
              HalloWelt.tpl
Da steht zusammen, was zusammen gehört und man muss keine zwei parallelen Verzeichnisstrukturen pflegen.

Was spricht dagegen, beides in eine Hierarchie zu packen?
 
M

maki

Gast
Du verwechselst da etwas.

In Maven kommen Java Klassen (Servlets) kommen nach [c]src/main/java[/c], andere Resourcen nach [c]src/main/resources/[/c].

Was spricht dagegen, beides in eine Hierarchie zu packen?
Ordnung und Konvention.
 

deamon

Bekanntes Mitglied
Achja, die Maven-Philosophie ist ja, für eine Webanwendung zwei Projekte zu machen. Finde ich irgendwie unintuitiv.

Wieso ist es unordentlich, die Templates neben die Java-Dateien zu packen? Wicket macht es auch so.
 
Zuletzt bearbeitet:

mvitz

Top Contributor
Wicket hat diese aber auch nur in der deployten Anwendung nebeneinander. Während der Entwicklung kann man dort auch zwei Verzeichnisse benutzen.

Ich persönlich bin auch für das trennen. Sucht man nach templates weiß man wo diese zu finden sind, sucht man nach Java Klassen, findet man sie dort. So kommt niemand durcheinander und sollte man später im Buildprozess etwas mit bestimmten Dateien machen wollen, ist dies idr. auch einfacher zu bewerkstelligen.
 

deamon

Bekanntes Mitglied
Es scheint mir irgendwie auf eine Geschmacksfrage hinauszulaufen. Jedenfalls wüsste ich nicht, warum man die Templates schlechter finden sollte, wenn sie im gleichen Verzeichnis wie die Java-Dateien liegen. Es wird ja wohl kaum jemand ein Template mit einer Java-Datei verwechseln (allein schon wegen der Dateiendung nicht).

Die Vereinfachung des Build-Prozesses, wenn man mit bestimmten Dateien noch etwas machen will, sehe ich da schon eher als Argument. Wobei ich nicht weiß, an was du denkst. Das einzige Argument, was mir für ausgelagerte Templates einfällt, ist, dass man sie leichter komplett austauschen kann, so wie man bei manchen Blogs, Foren usw. das Aussehen durch Wechsel der Templates ändern kann.
 
M

maki

Gast
Achja, die Maven-Philosophie ist ja, für eine Webanwendung zwei Projekte zu machen. Finde ich irgendwie unintuitiv.
.
Wieso 2 Projekte?

Meinst du damit die Javaklassen komplett in ein Modul auszulagern?
Das kann man machen, muss aber nciht, wenn die Javaklassen keinen Bezug zum Web haben und wiederverwendbar sind, haben bietet es sich an.
Jedenfalls bist du bei Maven2 gut beraten dich an die Koventionen zu halten, die pom wächst sonst sehr schnell und wird unübersichtlich.

Ps: Ressourcen und Java Klassen zu trennen ist nicht erst durch Maven bekannt geworden.
Schon mal mit Hibernate ohne Annotations gearbeitet? Für die mapping Dateien ein eigenes package zu machen war üblich, da es sonst unübersichtlich wurde. Mit getrennten Ordner war das kein Problem.
 
Zuletzt bearbeitet von einem Moderator:

deamon

Bekanntes Mitglied
Im normalen web-app-Archetype ist kein Verzeichnis für Java-Klassen vorgesehen. Allerdings scheinen die Maven-Entwickler selbst nicht besonders überzeugt von ihrem Archetype zu sein, denn sie schreiben: "If you were looking for a functional web application, this archetype is going to disappoint you." Maven Book: 16.3.Available Archetypes

Da frage ich mich: Wozu dann der Quatsch? Konventionen sind ja schön und gut, aber diese Konvention in Form eines Archetyps (der auch noch die betagte JUnit-Version 3.8 mitbringt) scheint mir nicht besonders sinnvoll zu sein. Es ist ja kein Zufall, dass es für alle möglichen Web-Frameworks eigene, umfassendere Archetyps gibt.

Ich fürchte, ich muss mir für meine Bedürfnisse einen eigenen Archetype bauen.

Aber zurück zu den Templates. Bei Hibernate habe ich die XML-Dateien auch direkte neben die Klassen gelegt, die damit beschrieben wurden. Ich fand das einfach und übersichtlich. Bei meinem aktuellen Fall stört mich an der Trennung, dass ich nicht einfach ein Template-Verzeichnis machen will, sondern die Templates in eine Verzeichnisstruktur sortieren will.

Letztlich hätte ich gerne eine Struktur, bei der man leicht Teile extrahieren kann. Wenn ich z. B. ein Paket "article" mit folgendem Inhalt hätte, könnte ich das ganze Paket leicht als Einheit in einer anderen Anwendung nutzen (so wie ja auch bei Wicket HTML und Java eine wiederverwendbare Einheit bilden).
Code:
article/
  ArticleServlet.java
  representations/
    GET.html
    GET.rss
    POST.html
 

Noctarius

Top Contributor
Komisch ich komm mit dem Archetyp webapp immer gut klar. Schnell ein src/main/java Verzeichnis dazu gepackt. Maven gesagt es soll die Projekteinstellungen in Eclipse aktuallisieren und du hast dein Java Src-Dir.

Ich versteh deinen deinen Einwand nich. Das JUNit ist halt etwas älter, und? Eine Zahl im pom.xml ändern und schon ist das aktuelle drin.

Ich weiß garnicht was sich immer alle so gegen die ConventionsOverConfiguration wehren. Es macht die Sache super einfach. Im Prinzip schafft es eine komplette App aus ca 10 Zeilen pom.xml zu bestehen. Wenn mir etwas absolut nicht passt konfiguriere ich halt (und ärgere mich hinterher, dass plötzlich irgendwas den Build verhagelt).
Ist es so schwer zu akzeptieren, dass die Maven Struktur ansich sinnvoll ist? Was ist so schlimm daran Resourcen und Code zu trennen? Ist das nicht auch nur eine MVC Version oder glaubst du MVC Frameworks haben sich auch nur aus Langeweile durchgesetzt oder weil es praktisch war?
 

deamon

Bekanntes Mitglied
Versteh mich nicht falsch, ich finde Konventionen prinzipiell auch gut. Bloß eine Konvention, wie der web-app-Archetype, nicht vollständig ist, finde ich das halt etwas blöd. Gleiches gilt für JUnit. Warum wird da standardmäßig so eine historische Version verwendet?

MVC hatte übrigens ursprünglich einen ganz anderen Hintergrund als bei MVC-Web-Frameworks. Der Kerngedanke von MVC passt eigentlich überhaupt nicht ins Web. Ich glaube die MVC-Frameworks haben sich in erster Linie verbreitet, weil es vorher die Unsitte gab, fachlich Logik in die Views zu schreiben. Beim eigentlichen MVC ist View und Controller ziemlich dicht zusammen. Swing und Wicket mit den Ereignishandlern in den Views gehen in die Richtung. Man könnte den Controller aber auch als Dienst auffassen (im Sinne von REST) und die View als völlig unabhängig betrachten. Umgekehrt könnte man aber auch bei REST einen Controller als Resource und die Views als deren Repräsentationen betrachten und dann würde es schon wieder eng zusammen gehören. Lange Rede, kurzer Sinn: ich glaube man kann beides rechtfertigen.
 

Noctarius

Top Contributor
Und wenn ich eine Webanwendung rein in JSPs bauen will? Dann brauch ich keine Sourcefolder ;) Und wie gesagt das Archetype ist halt älter, weil sich seit dem nichts groß an dem Aufbau von Webanwendungen geändert hat.
 

deamon

Bekanntes Mitglied
Stimmt, der web-app-Archetype passt eigentlich nur zu JSPs. In allen anderen Fällen, wird man Java-Klassen (oder auch Scala-Klassen ...) haben und dann passt er nicht mehr. Und JSP sollte sowieso verboten werden! ;-)

Aber um noch mal auf das eigentliche Thema zurückzukommen: Ich glaube, ich sehe eine Webanwendung modularer als die meisten Entwickler. Ein Servlet mit ein paar Templates ist ja im Prinzip eine kleine, wiederverwendbare Einheit. Wäre es da nicht naheliegend die zusammengehörigen Dateien, auch zusammen zu speichern, so dass man sie Problemlos in eine JAR-Datei packen und anderswo nutzen kann? Das finde ich auch bei Wicket sehr gekonnt. Prinzipiell könnte man ja die grafische Oberfläche auch in Java beschreiben, nur ist es in HTML in der Regel einfacher.

Wenn man die Templates in einer anderen Verzeichnishierarchie hat, geht das nicht mehr. Dann wäre die Webanwendung, also die gesamte WAR-Datei, die kleinste wiederverwendbare Einheit.
 

Atze

Top Contributor
javascript heißt auch net java und ist ne scriptsprache! :) actionscript, javascript, extendscript, warum nicht javafxscript? :) außerdem ist javafx die idee, javafxscript ist die sprache, meiner meinung nach :)

"The JavaFX family of products features a high-performance declarative scripting language, JavaFX Script, for building and delivering the next generation of rich Internet applications for desktop, mobile, TV, and other consumer platforms."

>> "... a high-performance declarative scripting language, JavaFX Script, ..." << :p
 

Noctarius

Top Contributor
Ok in dem Fall überzeugt, aber das Javascript nicht Java heißt ist keine Begründung.
Trotzdem ist JavaFx Script hässlich und erinnert an JavaScript :D
 

Atze

Top Contributor
hehe, ich hab noch nichts produktives damit auf die beine gestellt, aber mich eingelesen, und ich finde es sehr interessant. man erspart sich viel listener-gefummel und kann super leicht swing-guis erstellen, nur die zusätzliche benötige api nervt. ansonsten bin ich von fx überzeugt!
 

Noctarius

Top Contributor
Schnell ist es gewiss, aber diese JSON Notation zur Erstellung von "Klassen" (oder Stages) ist mir zu wider. Vermutlich liegt es aber mehr an meiner grundsätzlichen Abneigung zu untypisierten Sprachen ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
R servlet-mapping führt zu 404-Fehlern Web Tier 0
B Servlet mit TomCat9 Web Tier 0
A redirect mit servlet-mapping in web.xml Web Tier 4
J Wie Mouse Event in Servlet einbinden? Web Tier 1
D JSF Servlet Mapping Web Tier 3
J Session Servlet - JavaScript Web Tier 6
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
Todesbote Servlet MVC Design Pattern Web Tier 1
A Anfänger-Frage Servlet/Applet/JSP Web Tier 0
Shams Allgemeine Verständnisfrage zum Thema Servlet (in Vaadin) Web Tier 2
H File Output Servlet Web Tier 6
I vTiger Astersik Connector: NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet Web Tier 0
OnDemand Servlet oder JSP Web Tier 12
H Servlet/JSP und OSGI Web Tier 2
L Servlet Datenbank Web Tier 0
D Java EE Servlet login Problem Web Tier 1
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Java Bean und Java Servlet Web Tier 2
D Servlet Servlet Weiterleitung static html Web Tier 5
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
H Servlet lässt sich nicht deployen Web Tier 7
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
J Servlet Zugriff Servlet Web Tier 11
A JSON von JavaScript an Servlet Web Tier 9
K Servlet + JSP: JSP-Seite ein Array/ArrayList überliefern vom Controller-Servlet Web Tier 8
0 Servlet.Properties Web Tier 3
P Servlet Wo gibt es das javax.servlet.Servlet? Web Tier 2
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
5 Bild Pfad Servlet Web Tier 2
D Datenbankzugriff im Servlet Web Tier 5
H Servlet Apache Geronimo: Servlet nicht erreichbar Web Tier 2
S Ich brauche Buchempfehlung über JSP und Servlet Web Tier 2
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
K Servlet URL Mapping Web Tier 3
S ClassPath für Servlet Web Tier 3
reibi Servlet Logging - Standard Servlet Web Tier 5
K Portlet, Servlet doGet und doPost Web Tier 4
reibi Servlet Alleinlaufendes Servlet bauen Web Tier 6
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
lukas24680 Servlet pro Request Web Tier 2
C Pageing mit JSp&Servlet Web Tier 5
D JSP JSP integriert ein Servlet... Wie? Web Tier 7
I Servlet vor Browser URL-Direktzugriff schützen Web Tier 3
N Servlet ausführen Web Tier 26
B statische Html Seite als response erhalten (Servlet) Web Tier 3
A javax/servlet/jsp/jstl/core/Config Web Tier 1
F Servlet mapping ;-) Web Tier 3
H Servlet Mapping mit JSF Web Tier 8
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
W MVC mit Bean, JSP und Servlet Web Tier 6
T Button im Servlet - Werte übergeben Web Tier 2
J werte per post an servlet übergeben und auswerten Web Tier 3
ruutaiokwu HttpServletRequest-instanz in servlet und JSP unterschiedlich? Web Tier 5
T Bild durch anderes Bild ersetzen mit Servlet Web Tier 3
E Mein erstes Servlet Web Tier 8
S Servlet automatisch aufrufen Web Tier 2
J Kommunikation zwischen Servlet und EJB Web Tier 6
C Image in Servlet Web Tier 2
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
N API Nutzung SERVLET Web Tier 12
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
G Servlet Ausgabe richtig benutzen Web Tier 4
W Servlet auf sich selbst verweisen lassen (Anfängerfrage) Web Tier 6
M Servlet Ausführungsfehler Web Tier 4
D Servlet alle 6h ausführen Web Tier 5
M Servlet & JSP Organisation Web Tier 2
J seltsames Auslastungsproblem bei Servlet Web Tier 7
ruutaiokwu JSF - läuft ausserhalb des servlet-containers? Web Tier 5
R Direkten Servlet-Aufruf verhindern (JSP) Web Tier 3
K Formularweiterleitung an Servlet Web Tier 5
N Servlet: Problem mit getParameterValues Web Tier 4
J Dateiupload- Servlet Web Tier 14
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
G Kommunikation Servlet + Applikation Web Tier 4
megachucky Welche Servlet-Version benötigt GWT 2.0? Web Tier 13
X Servlet Select box Web Tier 6
S Java Servlet Content Type Web Tier 3
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
M Servlet neuladen Web Tier 2
H Wie wurde ein Servlet aufgerufen Web Tier 2
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
H servlet fehlermeldung Web Tier 3
W JSP/Servlet Web Applikation programmierung Web Tier 9
J Faces response aus einem anderen Servlet heraus rendern Web Tier 4
E Servlet mit einem Link aufrufen? Web Tier 13
D Servlet FacesServlet is not available und Web Tier 3
S servlet bedienen mit get und post parameter Web Tier 10
S Laden von globalen Resourcen im Servlet Container..? Web Tier 3
T JBoss + Servlet + HTML Fileupload + Encoding Web Tier 1
2 Servlet: Pfad zu Webcontent Web Tier 6
J Servlet Sicherheit Web Tier 4
J struts2: vom value stack zum servlet Web Tier 14
MQue Servlet destroy Web Tier 11

Ähnliche Java Themen

Neue Themen


Oben