Java / JSP / Servlets - Pfad-Probs bei Oracle Application Server

Chimaira

Erfahrenes Mitglied
Hoi Leute,

ich habe ein Problem. Mein Projekt ist wie folgt aufgebaut:

Code:
Aubau: (Eclipse)

Projekt
- src
  - Java Packages
    - Java Klassen  (diverse Manager zum Handlen von XML-Dateien)
  - Webpackage
    - Servlets         (Upload-, Logout-, AddEdit-, Delete-Servlet)

- Web-Content
  - admin              (Dateien für das ACP)
  - upload
  - settings
  - index.jsp          (User-Frontend)

Jetzt mein Problem: Wenn ich aus einer normalen Java-Klasse (siehe Oben) eine Datei anlegen will (XML), dann erstellt er dies derzeit in dem OC4J-Container-Root.

Aber wie finde ich bitte den Content-Root-Pfad in einer normalen Java-Klasse raus? Denn die Applikation kann ja unter einem beliebigen Namen deployt werden.

Content-Root-Beispiel: $oc4j/applications/test/upload/

$oc4j ist der root des Containers!
test ist der Anwendungsname
upload ist der Content-Root-Name (hier sind die Ordner aus dem Web-Content (siehe Oben))

Ich hoffe mir kann jemand helfen. Bin schon voll depressiv. o_O


Greeze Chimaira
 
Zuletzt bearbeitet:
Meinst du getServletContext().getRealPath("settings"); Das sollte dir den Pfad zu deinem settingsordner geben.

Gruß
ollie

Hi,

irgendwie wusste ich das du antwortest. ^^ Für solche Fragen biste immer zu haben.

Code:
getServletContext().getRealPath("settings");

Diese Methode gibts bei Verwendung von normalen Java Klassen glaube nicht.

Aber ich glaube das Problem hat sich erübrigt. Habe nochmal mit meinem Team gesprochen. Da sich der Ordner settings (so wie ich mir das gedacht habe) im Applikationsordner befindet, werden bei einem Redeployment ja alle angelegten Dateien gelöscht. Das ist Seitens meines Teams nicht gewollt.

Also muss ich sone Art Installmanager schreiben, wo der Admin beim ersten Deployment alle Pfadangaben einstellt.

Aber mal ne andere Frage. Findest du es aus sicht sauberer Programmierung sinnvoll in einem Webprojekt Java-Klassen beizufügen?

Wie du oben siehst gibts halt den Bereich src - JavaPackages. Dort sieht es aus wie bei einem ganz normalen Programm.

Code:
src
- de.beispiel.manager
  - ApplicationManager.class

So meinte ich das ursprünglich. Aus einer normalen Class-Datei den Servlet-Path herausbekommen.

Trotzdem danke für deine Hilfe.

Greeze Chimaira
 
Nunja, das ist ja eher ne frage der logischen Aufteilung. So wie ich das aus deinem "Baum" oben raus gelesen hab, hast du extra Packages für die "eigentliche Anwendung" und für "das Webfrontend".

Somit sollten Klassen die zum Beispiel von der Servlet API abhängen NUR in den Packages für das Webfrontend liegen. Sowas zu kontrollieren ist ne spannende Sache. Zum einen kann man einfach darauf achten. Zum anderen gibt es Tools, mit denen man solche Constraints definieren und (schon während der Entwicklung) überwachen lassen kann (SonarJ z.B.).

Recht gängige Praxis ist es, solche Sachen zumindest zur Buildtime über ein Plugin im Buildsystem zu checken. Für Maven gibt es z.B. XRadar oder das etwas rudimentärere JDepend usw.

Die restliche Anwendung sollte natürlich nicht auf die Servlet API zugreifen, da du die sonst ans Web bindest. Im Idealfall arbeitet deine Applikation (also das was im Bereich Java Packages liegt) gegen ein Interface (z.B. FileSystemInformation) und bekommt die konkrete Instanz durch DependencyInjection hereingereicht. So könnte der Webbereich dann halt eine Implementierung zur Verfügung stellen, die mit getServletContext().getRealPath() arbeitet. Für Testzwecke hat man dann halt evtl eine, die mit irgendeinem temporären Verzeichnis der lokalen Maschine arbeitet.

Alle Klarheiten beseitigt? ;)

REINHAUN!
 
hmm, naja. Bin noch Azubi und versuche das ganze ein wenig zu verstehen. Nur das ist noch ein wenig zu hoch für mich glaube ich. o_O

Was zu beachten ist bei der Trennung von Web-Frontend und Funktionalität das werde ich denke schon im Laufe meines Berufslebens schon erfahren.

Ich danke dir trotzdem vielmals für deine Erklärung und deiner Hilfe.

Wie lange programmierst du eigentlich schon im Bereich J2EE?

GReeze Chimaira
 

Neue Beiträge

Zurück