# Wie gliedert man ein Webprojekt



## Guest (24. Okt 2008)

Hallo,

ich habe gerade zum erstenmal eine Webanwendung über Eclipse (dynamisches Webprojekt) gebaut. Die Anwendung verfolgt folgendes Prinzip:

- Zunächst werden die Daten über ein Formular im Webfrontend eingegeben
- drückt man auf den Absenden-Button des Formulars, so werden die Daten einem Servlet übergeben
- das Servlet baut nun über das Hibernateframework eine Verbindung zu einer OracleXE-Datenbank auf
- in der OracleXE Datenbank werden die Daten gespeichert

Nun besteht das Webprojekt aus einer ganzen Menge von Dateien (html, xml, jars, servlets, css, property-Dateien usw.). Ich hab nun leider keine Ahnung wie ich die Struktur dieser Dateien korrekt organisiere. 

Soviel ich weiss gibt es eine Servlet-Spezifikation in der genau erklärt ist wie ein solches Projekt zu gliedern ist. Von anderen Leuten wiederrum habe ich gehört das ich mir die Tutorials zum Apache Tomcat durchlesen soll um zu erfahren, wie ein solche Projekt nach Konvention geliedert werden muss.

Könnt ihr mir vielleicht einen guten Link geben, der sich mit diesem Thema beschäftigt.


----------



## maki (24. Okt 2008)

Da du offensichtlich allergisch gegen Google bist, hier ein paar links daraus:

Servlet Spek. 2.4
http://jcp.org/aboutJava/communityprocess/final/jsr154/index.html

Tomcat doku:
http://tomcat.apache.org/tomcat-5.5-doc/index.html


----------



## Guest (24. Okt 2008)

Ich muss nochmal nachfragen. Bin anscheinend etwas schwer von Begriff. Sorry...  

1.) zu der Apache Seite

Auf der Apache Tomcat Seite sind ja eine ganze Menge Docus. In welcher wird denn was über die Struktur von Webprojekten beschrieben. Hab mir einige angeschaut, bin allerdings nicht sicher welche die richtige ist.

2.) zu der Servletspezifikation

Was die Servlet Spezifikation angeht, da weiss ich auch nicht was ich lesen soll. Hab den Kram mal runtergeladen. Das ist doch nur eine API in der die Funktion der verschiedenen Klassen beschrieben wird. Eine Anleitung welche die Struktur von Webprojekten beschreibt kann ich leider nicht finden.


----------



## maki (24. Okt 2008)

> Auf der Apache Tomcat Seite sind ja eine ganze Menge Docus. In welcher wird denn was über die Struktur von Webprojekten beschrieben. Hab mir einige angeschaut, bin allerdings nicht sicher welche die richtige ist.


zB.
http://tomcat.apache.org/tomcat-5.5-doc/appdev/deployment.html[/quote]http://tomcat.apache.org/tomcat-5.5-doc/appdev/deployment.html



> Was die Servlet Spezifikation angeht, da weiss ich auch nicht was ich lesen soll.


Am besten alles.
Nein, das ist kein Scherz.

Ab Seite 69 wird das directory Layout besprochen, solltest aber alles lesen.

Bei deinem Wissensstand kannst du gar nicht zuviel lesen 
Nicht böse gemeint, aber dieses Wissen ist eine wichtige Grundlage für so ziemlich jede Art von Java WebApp.


----------



## SnooP (24. Okt 2008)

so viele konventionen gibt es jetz nu auch nich...

neben den Sourcen - also den Javaklassen benötigt ein wolches Webprojekt ein Web-Verzeichnis wo man den ganzen Krempel ablegt, der fürs web gedacht ist - sprich die jsps oder htmls die Bilder etc... 
dazu brauchts dann noch ein WEB_INF Verzeichnis welches zumindest die web.xml für die Servlet-Spec enhalten muss - dort wird dann alles für das servlet konfiguriert.
Aus dem ganzen wird dann für einen Servlet-Container ein .war generiert (z.B. über Eclipse oder via ANT zu realisieren) und dieses war enthält dann zusätzlich im WEB_INF/classes noch die Klassen für das Servlet und die Anwendung an sich... - das tut es denn aber auch schon wieder automatisch.


----------



## maki (24. Okt 2008)

>> so viele konventionen gibt es jetz nu auch nich... 

Jedenfalls mehr als sich in einem Post in einem Forum rüberbringen lassen, vor allem wenn man gar keine Ahnung/Erfahrung hat.

Abgesehen davon sind die Fehler in "hingeschmierten" Posts in Foren oft verwirrender als es mal richtig zu lernen  

Von wegen "WEB_INF" und so.. *g*


----------



## SnooP (24. Okt 2008)

okay sorry ... ich wollte ihm nur die panik nehmen  ... ich hab die Servlet-Spezifikation auch nicht gelesen und komme trotzdem recht weit


----------



## maki (24. Okt 2008)

Schon klar, es gibt auch Bücher, aber die Spek tut es zur Not auch 

Die Sache ist nur die, dass wenn jemand nach der Verzeichnisstruktur einer Webapp fragt er wahrscheinlich keine Ahnung von der Servlet.xml etc. hat.


----------



## Guest (27. Okt 2008)

Ich habe mir die Servlet-Spezifikation und die Tomcat-Dokumentation angeschaut. Obwohl ich diese noch lange nicht komplett durchgearbeitet habe möchte ich bereits an dieser Stelle eine weitere Frage stellen:

Laut der Spezifikation können HTML-Dateien, JSP's, CSS-Dateien, JavaScript-Dateien, Bilddateien usw. direkt im ROOT-Verzeichnis der Webanwendung abgelegt werden. Im Gegensatz dazu müssen Javaklassen, Servlets und JAR-Dateien innerhalb des Verzeichnisses WEB-INF abgelegt werden. 

Warum ist solch eine Gliederung notwendig? Warum sollte man z.B. JSP's nicht auch innerhalb des WEB-INF Ordners ablegen?

Umgekeht die Frage: Warum sollten Javaklassen, Servlets und JAR-Dateien nicht außerhalb des WEB-INF-Ordners positioniert werden?


----------



## maki (27. Okt 2008)

> Warum ist solch eine Gliederung notwendig?


Irgendeine Struktur braucht man eben, die Trennung zwischen Java Ressourcen und Web Ressourcen erscheint doch sinnvoll, oder?



> Warum sollte man z.B. JSP's nicht auch innerhalb des WEB-INF Ordners ablegen?


Das kann man, jedoch darf der Client (Browser) nicht darauf zugreifen, sondern nur der Server selbst,
Man kann JSP im WEB-INF ablegen, jedoch kann darauf nur ein Servlet zugreifen.
Sehr nützlich wenn man sich anstriktes MVC halten will und gleichzeitig die Sicherheit des Container ausnutzen möchte.



> Umgekeht die Frage: Warum sollten Javaklassen, Servlets und JAR-Dateien nicht außerhalb des WEB-INF-Ordners positioniert werden?


Weil das unsicher wäre, da darf jeder drauf zugreifen.


----------



## Guest (27. Okt 2008)

Mit Hilfe von Eclipse kann ich mir ja dann eine WAR-Datei von diesem Webprojekt genierieren lassen. Die kopiere ich dann einfach in den Apache Tomcat, wo sie automatisch entpackt wird.

Nun höre ich immer wieder, wie sinnvoll doch die Verwendung von ANT in diesem Context ist. Ist sehe diesen Zusammenhang allerdings nicht. Eine WAR-Datei erstellen kann ich doch auch per Hand. 

Kannst du mir sagen, in wie fern ANT hier eine Erleicherung darstellen kann?


----------



## maki (27. Okt 2008)

Ant und Maven können automatisch einen Build erzeugen, zB. wenn sich etwas im SCM Repository ändert.

Oder auch einfach von der Kommandozeile dein Projekt bauen.

Ausserdem können die beiden auch automatisch einen Deploy auf den Server machen.

Dadurch wird alles einfacher, man muss nicht mehr alle Details kennen sondern nur noch einen Befehl auf der Kommandozeile absetzen.

Automatische Builds sind etwas sehr gutes.


----------



## Guest (27. Okt 2008)

Eine letzte Frage noch:

Sollte ich mich zuerst in ANT einarbeiten oder direkt mit Maven starten?


----------



## Guest (27. Okt 2008)

nicht ganz die letzte Frage. Mir ist grade noch etwas aufgefallen was ich gerne nachfragen würde.

Wenn ich mir in Eclipse ein dynamisches Webprojekt erstelle dann wird eine Struktur vorgegeben, die nicht der Servlet-Spezifikation entspricht. Im Detail betrifft das folgende Punkte:

1.) 
Der src-Ordner für die Javaklassen wird defaultmäßig nicht innerhalb von WEB-INF erzeugt sondern direkt unter ROOT. Warum verstößt Eclipse hier gegen die Konventionen?

2.)
WEB-INF wird nicht direkt unterhalb des root-Verzeichnisses erzeugt. Dazwischen existiert noch ein Ordner WebContent (Name frei wählbar). Warum verstößt Eclipse hier gegen die Konvention?


----------



## maki (27. Okt 2008)

> Wenn ich mir in Eclipse ein dynamisches Webprojekt erstelle...


... dann erstellt Eclipse eine Struktur, mit der du deine Quellen bearbeiten kannst.

Wenn du dann ein WAR File exportierst stimmt die Struktur wieder.



> Warum verstößt Eclipse hier gegen die Konventionen?


Tut es gar nicht, es gibt in der Servlet SPek. keinen Standard/Konvention nach denen deine Sourcen gegliedert sein müssen.

Eclipse trennt einfach nach Java Ressourcen und Webressourcen.


----------



## Guest (27. Okt 2008)

> ... dann erstellt Eclipse eine Struktur, mit der du deine Quellen bearbeiten kannst.



 Krass... das ist ja wirklich cool. Vielen Dank für die super Hilfe.


----------



## maki (27. Okt 2008)

Es ist eben viel einfacher zu erklären wenn die Gegenseite zumindest die Grundlagen lernt, für beide Seiten


----------



## Guest (27. Okt 2008)

Bis auf eine Kleinigkeit bin ich jetzt mit der Struktur des Webprojektes zufrieden.

Die Hibernatekonfigurationsdateien und die log4j Konfigurationsdatei liegen teilweise in verschiedenen Packages bzw. direkt unter dem Verzeichnis src (und damit im resultierenden WAR direkt unter classes). 

Ist es sinnvoll, solche Konfigurationsdateien in einem Verzeichnis zusammenzufassen z.B. src/conf (resultierend in der WAR wäre das dann classes/conf).

Falls solch eine Zusammenfassung sinnvoll ist, dann müßte ich doch auch irgendwie festgelegt werden, dass die Konfigurationsdateien jetzt und einem anderen Pfad zu finden sind. Wo kann ich die Pfadangabe denn ändern bzw. muss ich das überhaupt?


----------



## maki (27. Okt 2008)

Alles was bei den Java/Class Klassen liegt, liegt im Classpath, und das ist gut so.
Ob du dafür ein eigenes Packet (conf) willst, wage ich mal zu bezweifeln, wäre aber möglich.
Was aber wirklich schlecht wäre, ist diese Dateien zu den Webressourcen zu stecken, wirklich sehr schlecht.

Die Zusammenfassung ist selten sinnvoll, da jede Konfig datei am besten im Packet liegen sollte wo sie gebraucht wird(oder zumindest "in der Nähe"), werden ja nicht alle Klassen die hibernate Konfig brauchen.

Ansonsten werden mdie eisten konfig Dateien automatisch im Classpath gefunden, egal wo sie liegen.


----------



## SnooP (28. Okt 2008)

also... eine Möglichkeit ist es neben src ein weiteres Verzeichnis properties oder auch conf zu packen und es als weiteres src-Verzeichnis zu kennzeichnen oder aber ant beibringen, dass er die Dateien aus conf mitkopieren soll.. dann stecken die ganzen Konfigurationsdateien am Ende im root von /classes... - somit kannst du immer über den classpath auf diese dateien zugreifen ohne weitere pfadangaben oder son gedöns.


----------

