Wille: Servletausgabe mit externem CSS formatieren?!

Hallo zusammen,

habe folgendes Problem : ich habe eine Internetseite mittels eines externen CSS formatiert. Auf diese Seite werden (falls der Benutzer es möchte) Daten von einer Datenbank geladen. Diese Daten werden von einem Servlet abgefragt, in HTML verpackt und angezeigt. Problem : auch diese Ausgabe des Servlets soll die externen Sylevorgaben verwenden. Wenn ich den Aufruf des externen CSS in das Ausgabe-HTML des Servlets packe, passiert aber leider gar nix mit meiner Ausgabe. Was kann ich tun? Das Style-Sheet als Inline in die HTML-Ausgabe zu packen, wollte ich eigentlich vermeiden.

Was kann ich tun? Muß ich die CSS-datei vielleicht in ein spezielles Verzeichnis des Servlets packen? Oder kann ich mein externes CSS prinzipiell nicht verwenden?

Besten Dank für Eure Hilfe ...
ciao, Wille

  1. hi,

    habe folgendes Problem : ich habe eine Internetseite mittels eines externen CSS formatiert. Auf diese Seite werden (falls der Benutzer es möchte) Daten von einer Datenbank geladen. Diese Daten werden von einem Servlet abgefragt, in HTML verpackt und angezeigt. Problem : auch diese Ausgabe des Servlets soll die externen Sylevorgaben verwenden

    Das sollte prinzipiell kein Problem sein. Aber irgendwie hab ich aufgrund deines älteren Threads den Eindruck, daß dir noch nicht ganz klar ist, was auf dem Server passiert und was beim Client. Dein Servlet stellt deinem Server HTML-Code zur Verfügung, der schickt alles an den Client, und schickt auch deine externe CSS mit. Beide Dateien landen normalerweise im Browsercache, und der Browser kuckt sich die Kopfdaten deines HTML-Dokuments an, findet einen Hinweis auf eine CSS, bindet die ein, liest den Rest HTML und stellt alles zusammen dar (grob zusammengefaßt).

    Das heißt: was dein Server an HTML auf die Reise schickt, muß die Aufforderung zum Einbinden der CSS enthalten. Und da nun dein Servlet auf Serverseite (wahrscheinlich) das gesamte HTML-Dokument zusammenschraubt, muß es wohl oder übel auch die Anweisung zum Einbau deiner CSS in den HTML-Code reinschubsen.

    Prüfen kannst du es ja, indem du dir den Quelltext der erhaltenen Seite im Browser anschaust. Wenn das Einbinden deiner CSS nicht geklappt hat, muß das zu erkennen sein, daß sie nicht aufgerufen wurde.

    Muß ich die CSS-datei vielleicht in ein spezielles Verzeichnis des Servlets packen?

    Das hängt von der Bauart deines Servlets ab.

    Oder kann ich mein externes CSS prinzipiell nicht verwenden?

    Doch, das müßtest du können.

    Grüße aus Berlin

    Christoph S.

    1. Hi,

      Das sollte prinzipiell kein Problem sein. Aber irgendwie hab ich aufgrund deines älteren Threads den Eindruck, daß dir noch nicht ganz klar ist, was auf dem Server passiert und was beim Client. Dein Servlet stellt deinem Server HTML-Code zur Verfügung, der schickt alles an den Client, und schickt auch deine externe CSS mit.

      Nein, die externe CSS schickt er nicht mit.
      Die muß der Client schon extra anfordern. Schon alleine wegen des Grundprinzips von HTTP, daß auf einen Request auch nur eine Response möglich ist.

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. Hallo Leute,

      find ich ja lustig, daß sich auf meine Fragen immer wieder die gleichen Enthusiasten melden ...  ;)

      @Christoph : Du hast ganz recht. Ich wurstel mich gerade erst in das Thema DB-Abfragen und Requests ein. Habe vorher immer nur mit Java zu tun gehabt oder halt mit statischem HTML. Insofern bin ich noch etwas grün hinter den Ohren ... Client und Server hab ich auch nur synonym für den Teil der serverseitig gespeicherten Webseiten verwendet, die der User zu Gesicht bekommt, während Server sozusagen die Backend-Funktionalität bedeuten soll.

      Ich habe es bereits versucht - so wie ihr geraten habt - den externen CSS-Aufruf einfach in den Servlet-Output einzubinden. Leider aber erfolglos.
      Meine Website-Struktur sieht folgendermaßen aus : ich habe eine Login-Seite ('index.htm' im Root-Verzeichnis). Wenn man diese Hürde überspringt, dann kommt man zu einer Arbeitsoberfläche (die eigentliche Seite, versteckt sich in verschiedenen Verzeichnissen). Zu Beginn werden alle Frames, Bilder, ... von Platte geladen. Hier ist das externe CSS bereits enthalten und funktioniert auch problemlos. Erst nach einigen Benutzereingaben erfolgt eine DB-Abfrage. Das Servlet sendet jetzt für das betreffende Frame den gleichen HTML-Code wie vorher von Platte geladen zurück. Es enthält exakt den gleichen Aufruf der CSS-Datei im Header. Aber: es funktioniert nicht!
      Aber das ist nur Schwierigkeitsgrad eins  ;)  Die serverseitig bereitgestellte Funktionalität (Java) kommuniziert zusätzlich mit mobilen Endgeräten. Daher werden alle Java-Klassen depolyed und in ein .jar-File verpackt. Der Inhalt dieses Files hat aber rein gar nichts mehr mit der Struktur des ursprünglich auf der Festplatte angelegten Verzeichniswust zu tun - somit hab ich auch keine Ahnung, wo ich nun mit den CSS-File hin soll oder was davon das Root-Verzeichnis ist?!

      Mal ganz abgesehen : der zurückgelieferte Inhalt wird in einem Frame dargestellt und überschreibt dort den vorherigen Inhalt. Zumindest am Anfang ist das die "lokal" geladene Datei. Muß dieser Servlet-Output nun die CSS-Datei aus Sicht des vorher überschriebenen Datei laden importieren oder aus Sicht des Root (angesprochene Login-Seite)???

      Besten Dank ...

      P.S. Mir will immer noch nicht in den Kopf, daß es keine Möglichkeit gibt, eine einzelne Variable vom "Backend" (Server) zur Website zu schicken ... Das geht wirklich nicht?

      1. Hi,

        Meine Website-Struktur sieht folgendermaßen aus : ich habe eine Login-Seite ('index.htm' im Root-Verzeichnis). Wenn man diese Hürde überspringt, dann kommt man zu einer Arbeitsoberfläche (die eigentliche Seite, versteckt sich in verschiedenen Verzeichnissen). Zu Beginn werden alle Frames, Bilder, ... von Platte geladen. Hier ist das externe CSS bereits enthalten und funktioniert auch problemlos. Erst nach einigen Benutzereingaben erfolgt eine DB-Abfrage. Das Servlet sendet jetzt für das betreffende Frame den gleichen HTML-Code wie vorher von Platte geladen zurück. Es enthält exakt den gleichen Aufruf der CSS-Datei im Header. Aber: es funktioniert nicht!

        Frage: Warum generierst Du manuell ein Servlet für die HTML-Ausgabe und _nicht_ eine JSP? In der entsprechenden Servlet-Klasse könntest Du dann auch sehen, ob Pfadangaben (in HTML) auf Resourcen während des 'Kompilierens' der JSP eventuell noch angepasst werden (und somit herausfinden, ob der Servlet-Container im Vergleich zu HTML evtl. ein unterschiedliches Pfadkonzept hat).

        Aber das ist nur Schwierigkeitsgrad eins  ;)  Die serverseitig bereitgestellte Funktionalität (Java) kommuniziert zusätzlich mit mobilen Endgeräten. Daher werden alle Java-Klassen depolyed und in ein .jar-File verpackt. Der Inhalt dieses Files hat aber rein gar nichts mehr mit der Struktur des ursprünglich auf der Festplatte angelegten Verzeichniswust zu tun - somit hab ich auch keine Ahnung, wo ich nun mit den CSS-File hin soll oder was davon das Root-Verzeichnis ist?!

        Ich dachte, die mobilen Endgeräte werden über den gleichen Kanal (HTTP/HTML) angebunden?

        P.S. Mir will immer noch nicht in den Kopf, daß es keine Möglichkeit gibt, eine einzelne Variable vom "Backend" (Server) zur Website zu schicken ... Das geht wirklich nicht?

        ????

        Viele Grüße,
        Martin Jung

  2. Hallo zusammen,

    hallo wille,

    wie christoph schon sagte: dem browser ist es egal ob er sein html von einem webserver oder einer servlet-engine bekommt. bzw. genauer gesagt, der html-content kommt in jedem fall vom webserver, da die servlet-engine alles was nach out geprintet wird an den webserver leitet, der es dann zum client schickt. d.h. du kannst wie auch in einer statischen html-seite ein externes stylesheet einbinden. der pfad zum stylesheet bezieht sich auf das document root und hat mit dem servlet nichts zu tun. du schreibst also einfach den entsprechenden html-code nach out:

    ...
    out.println("<HTML>\n<HEAD><TITLE>blabla</TITLE>\n");
    out.println("<link rel='stylesheet' type='text/css'  href='style.css'>\n</HEAD>");
    ...

    bzw. wenn dein stylesheet nicht im document root liegt entsprechend :

    ...href='stylesheets/style.css'...

    oder wo auch immer du das stylesheet ablegst.

    gruß aus berlin, volker