Arthur Dent: (JSP)(Server) generierte xml-Datei (*.jsp) parsen

N'Abend,

wie man an Thema+Themenbereich schon sehen kann, weiß ich gar nicht genau, wo ich nach der Ursache meines Problems suchen soll, deshalb schildere ich es einfach mal:

ich habe eine jsp-Seite, welche ein Dokument mit xml-Struktur generiert
also vereinfacht dargestellt:

  
<% wert = _Rückgabe_der_DB-Abfrage_ %>  
<?xml version="1.0">  
<root>  
  <val><%=wert%></val>  
</root>  

Des Weiteren habe ich ein Javascript-Skript, welches XML-Dateien ausliest (Datei wird als Parameter an Fkt. übergeben) und mir dann z.B. den Wert innerhalb von <val></val> zurückgibt. Nun möchte ich aber nicht nur "echte" xml-Dateien übergeben, sondern auch obige jsp-Datei. Der IE spielt da auch mit, aber Firefox lässt sich hier anscheinend kein x für'n o verkaufen (oder kein jsp für xml)...

Das Problem liegt leider schon etwas zurück, so dass ich mich nicht mehr an die Symptome erinnern kann (ich weiß nur, dass es nicht geht - also Firefox ignoriert mich da wohl völlig).

Kann ich evtl. was am Server (Tomcat) einstellen - Mime-Type, oder sowas - aber so, dass andere jsp-Dateien noch als solche erkannt werden?

Gruß,
Arthur D.

--
>> So long, and thanks for all the fish. <<
  1. Hi

      
    <%@ page  
              [ language="java" ]  
              [ extends="package.class" ]  
              [ import="{package.class | package.*}, ..." ]  
              [ session="true | false" ]  
              [ buffer="none | 8kb | sizekb" ]  
              [ autoFlush="true | false" ]  
              [ isThreadSafe="true | false" ]  
              [ info="text" ]  
              [ errorPage="relativeURL" ]  
              [ contentType="mimeType [ ;charset=characterSet ]"   |   "text/html ; charset=ISO-8859-1" ]  
              [ isErrorPage="true | false" ]  
    %>  
     
    

    THX

    --
    ie:} fl:( br:> va:) ls:& fo:# rl:( n4:? ss:) de:] js:| ch:? sh:) mo:? zu:)
    ------------------------------
    lieber ein Pinguin der läuft
    als ein Fenster das hängt
    ------------------------------
  2. hi,

    Kann ich evtl. was am Server (Tomcat) einstellen - Mime-Type, oder sowas - aber so, dass andere jsp-Dateien noch als solche erkannt werden?

    Du musst einen passenden Content-Type Header vorausschicken - also bspw. text/xml.

    Am besten machst du das aus dem JSP-Script heraus - kurzes googlen bringt mich zu der Vermutung, dass das mit
    response.setContentType("text/html;charset=...");
    gehen sollte.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Vielen Dank euch beiden... Ich kann beides leider erst morgen testen (hoffe ich zumindest). Ich werde dann vom (hoffentlich eintretenden) Erfolg berichten.

    Gruß,
    Arthur D.

    --
    >> So long, and thanks for all the fish. <<
  4. Hej,

      
    <% wert = _Rückgabe_der_DB-Abfrage_ %>  
    <?xml version="1.0">  
    <root>  
      <val><%=wert%></val>  
    </root>  
    
    

    Des Weiteren habe ich ein Javascript-Skript, welches XML-Dateien ausliest (Datei wird als Parameter an Fkt. übergeben) und mir dann z.B. den Wert innerhalb von <val></val> zurückgibt. Nun möchte ich aber nicht nur "echte" xml-Dateien übergeben, sondern auch obige jsp-Datei.

    Moment ... du willst an den Browser kein interpretiertes JSP schicken sondern echtes? Dann sorge dafür, dass du wohlgeformtes XML und kein JSP-Kauderwelsch auslieferst! Guckst du hier: JavaServer Pages 2.0 Specification.

    Eine sehr knappe Zusammenfassung findest du auch in der JavaInsel#17.5.6 Entsprechende XML-Tags.

    Der IE spielt da auch mit, aber Firefox lässt sich hier anscheinend kein x für'n o verkaufen (oder kein jsp für xml)...

    Das ist auch das Einzige worauf man sich beim IE verlassen kann: Er ist für jeden Blödsinn zu haben.

    Beste Grüße
    Biesterfeld

    --
    Art.1: Et es wie et es
    Art.2: Et kütt wie et kütt
    Art.3: Et hätt noch immer jot jejange
    Das Kölsche Grundgesetz
    1. Morgen,

      Moment ... du willst an den Browser kein interpretiertes JSP schicken sondern echtes? Dann sorge dafür, dass du wohlgeformtes XML und kein JSP-Kauderwelsch auslieferst! Guckst du hier: JavaServer Pages 2.0 Specification.

      Eine sehr knappe Zusammenfassung findest du auch in der JavaInsel#17.5.6 Entsprechende XML-Tags.

      ok, ok, da hast du schon recht... allerdings sollte das Beispiel nur das Prinzip verdeutlichen, nämlich, dass ich hier nicht alles dynamisch erzeuge, sondern lediglich einen dynamischen Wert in eine feste Struktur schreibe. Außerdem arbeite ich mir einer eigenen Taglib, was ich hier jetzt nicht reinbringen wollte.
      D.h. im Original hat der xml-Header natürlich auch ein abschließendes "?>" und das jsp hat in etwa die Form

      myTaglib:exQuery
      myTaglib:sql
       select x from y
      </myTaglib:sql>
      <root>
      myTaglib:results
        <val><myTaglib:getColumn position="1"/></val>
      </myTaglib:results>
      </root>
      </myTaglib:exQuery>

      Also kurz gesagt:

      • die jsp ist sauber
      • das, was mir der Browser anzeigt, wenn ich diese jsp direkt aufrufe, ist eine saubere xml-Struktur. Ich kann auch den Quelltext aus dem Browser heraus als xml-Datei speichern und dann an die Fkt. übergeben oder in einem xml-Editor bearbeiten/prüfen.

      Hm, also einen Punkt hab ich dabei wohl doch übersehn, nämlich die taglib-Direktive. Diese hab ich einfach per copy&paste übernommen:
      <%@ taglib uri="/WEB-INF/tld/myTaglib.tld" prefix="myTaglib" %>
      müsste dies dann so aussehen:
      <jsp:directive.taglib uri="..." prefix="..." /> ?

      Gruß,
      Arthur D.

      --
      >> So long, and thanks for all the fish. <<
      1. Hej,

        • das, was mir der Browser anzeigt, wenn ich diese jsp direkt aufrufe, ist eine saubere xml-Struktur.

        Hm, also einen Punkt hab ich dabei wohl doch übersehn, nämlich die taglib-Direktive.

        Also was jetzt? Sauber, fehlerhaft oder nur ein bisschen schwanger? ;-)

        Diese hab ich einfach per copy&paste übernommen:
        <%@ taglib uri="/WEB-INF/tld/myTaglib.tld" prefix="myTaglib" %>
        müsste dies dann so aussehen:
        <jsp:directive.taglib uri="..." prefix="..." /> ?

        Ne, soweit ich das sehen kann, musst du diese Direktive ersatzlos streichen. Es reicht lediglich XML-konforme Namensraumangaben zu machen. Nachzulesen auf Seite 1-136 der zuvor verlinkten Spec oder auch unter der Sun Kurzreferenz.

        Beste Grüße
        Biesterfeld

        --
        Art.1: Et es wie et es
        Art.2: Et kütt wie et kütt
        Art.3: Et hätt noch immer jot jejange
        Das Kölsche Grundgesetz
  5. Hallo,

    erstmal Danke für die Antworten und dann ein großes SORRY! ich hab nämlich Blödsinn gepostet (ich wollte mir das alles ja erstmal ansehen, aber dann hat's mir so unter den Nägeln gebrannt, dass ich einfach drauf los gepostet habe...)

    ich habe eine jsp-Seite, welche ein Dokument mit xml-Struktur generiert
    also vereinfacht dargestellt:

    ... und etwas ausführlicher

      
    <%@ taglib uri="/WEB-INF/tld/myTaglib.tld" prefix="myTaglib" %>  
    <?xml version="1.0"?>  
    <root>  
    <myTaglib:exQuery>  
    <myTaglib:sql>  
     select id, value from y  
    </myTaglib:sql>  
    <myTaglib:results>  
      <id><myTaglib:getColumn position="1"/></id>  
      <val><myTaglib:getColumn position="2"/></val>  
    </myTaglib:results>  
    </myTaglib:exQuery>  
    </root>  
    
    

    Bei direktem Aufruf der JSP erhalte ich dann z.B. (wenn 3 Datensätze selektiert wurde):

    • im IE (sowohl Seite als auch Quellcode)
      
    <?xml version="1.0"?>  
    <root>  
      <id>1</id>  
      <val>a</val>  
      <id>2</id>  
      <val>b</val>  
      <id>3</id>  
      <val>c</val>  
    </root>  
    
    
    • Im Firefox sieht's zwar im Quellcode genauso aus, aber in der angezeigten Seite steht nur:
      1 a 2 b 3 c

    Der Versuch mit den von euch gegebenen Tipps (+ jsp-Spezi + Google) weiter zu kommen, führte entweder zu dem gleichen Resultat, oder dazu, dass meine Taglib nicht mehr erkannt wurde (also entweder Fehler oder Ausgabe der jsp-Tags, ohne diese zu interpretieren)

    An einer Stelle hab ich das Problem jetzt umgangen, indem ich statt AJAX zu nutzen und XML zu parsen, auf Remote Scripting with IFRAME zurückgreife. Das funktioniert (zumindest an dieser einfachen) Stelle auch ganz gut, aber den ganzen Code umzuschreiben wär doch mehr Arbeit, als mir lieb ist. Von daher bin ich auch weiter für Vorschläge dankbar...

    Gruß,
    Arthur D.

    --
    >> So long, and thanks for all the fish. <<
    1. Arthur,

      ich befürchte Dein Problem noch nicht ganz verstanden zu haben, muss aber auch zugebn, mich der Kombination Javascript/XML nicht auszukennen. Allerdings hab ich die letzten zwei Tage mich mal ein wenig zu Ajax belesen wollen und habe den Eindruck, das es das ist was du möchtest? Clientseitig eine XMLHttpRequest bearbeiten?

        
      
      > <?xml version="1.0"?>  
      > <root>  
      >   <id>1</id>  
      >   <val>a</val>  
      >   <id>2</id>  
      >   <val>b</val>  
      >   <id>3</id>  
      >   <val>c</val>  
      > </root>
      
      

      Soweit is doch schonmal toll. Du hast zwar keine Angaben zur Zeichenkodierung und zum DTD-Bezug gemacht, aber es ist schonmal wohlgeformt. Wohlgemerkt nicht valide.

      Der Versuch mit den von euch gegebenen Tipps (+ jsp-Spezi + Google) weiter zu kommen, führte entweder zu dem gleichen Resultat, oder dazu, dass meine Taglib nicht mehr erkannt wurde (also entweder Fehler oder Ausgabe der jsp-Tags, ohne diese zu interpretieren)

      Das versteh ich wiederrum nicht. Entweder geht es hier um ein clientseitiges Problem (Javascript/XML/Firefox) oder ein Serverseitiges JSP-processing. Es riecht eher nach erstem, weshalb ich mal das Thema umstelle um die oft Java-ausblendenden, Javascript/Ajax-Experten einzuladen.

      Das funktioniert (zumindest an dieser einfachen) Stelle auch ganz gut, aber den ganzen Code umzuschreiben wär doch mehr Arbeit, als mir lieb ist.

      Ich bezweifle das das nötig sein wird.

      Was sagt eigentlich die Javascript-Konsole im Firefox? Wie sieht dein Javascript aus?

      Beste Grüße
      Biesterfeld

      --
      Art.1: Et es wie et es
      Art.2: Et kütt wie et kütt
      Art.3: Et hätt noch immer jot jejange
      Das Kölsche Grundgesetz