(JSP)(Server) generierte xml-Datei (*.jsp) parsen
Arthur Dent
- javascript
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.
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
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
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.
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
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:
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.
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
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):
<?xml version="1.0"?>
<root>
<id>1</id>
<val>a</val>
<id>2</id>
<val>b</val>
<id>3</id>
<val>c</val>
</root>
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.
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