HTTP Zeilenumbrüche aus HTML-Textarea entfernen

Xendarii

Mitglied
Hallo, liebe Forengemeinde.

Für die Uni musste ich in diesem Semester schon einen (sehr abgespeckten) XML-Parser schreiben, den wir jetzt auch Netzwerkebene zum Laufen bringen sollen. Soweit funktioniert auch alles ganz prima, Tomcat läuft, lässt sich ansprechen, die Kommunikation der Servlets untereinander klappt... jetzt will ich den XML-Code auf unserer HTML-Seite mit einer Textarea einlesen lassen, bei der Übertragung wird der Inhalt der Textarea als Parameter mitgegeben, also auch schon übertragen, damit ich ihn benutzen kann.

Das Problem: Wenn ich den XML-Code in der Textarea mit Zeilenumbrüchen trenne, sendet er die als "%0A%0D" auch mit - und genau da kommt dann das Problem. Ich brauche nämlich in meinem Code einen StringBuilder, den ich aus dem Array, das ich mit request.getParameterValues() bilde. In diesen StringBuilder integriert er auch die Leerzeichen, die ich da dann aus irgendeinem Grund nicht mehr rausbekomme. Hab schon versucht, ihn in einen String umzuwandeln und da ganz einfach die "\n" zu ersetzen, was allerdings nichts gebracht hat.

Kann mir jemand weiterhelfen? Die Zeilenumbrüche sorgen leider dafür, dass mein Parser das XML-Dokument nicht mehr als richtig erkennt und ich würde ihn ungern komplett umschreiben, zumal ich jetzt auch keinen Ansatz hätte, wie genau ich das bewerkstelligen müsste.
 
N

nillehammer

Gast
Wenn du die Eingabe der Textarea bereits in einem String hast, helfen Dir Regexes. Was Du willst, ist alle Trennzeichen (Leerzeichen, Tabs, Zeilenumbrüche) zwischen den Tags (und zwar nur da) zu entfernen. Folgender Codeschnipsel als Ansatz:
Java:
private static final Pattern SEPARATORS_BETWEEN_TAGS = Pattern.compile(">(\\s+?)<");

static String eraseSeparatorsBetweenTags(final String withSeparators) {

  final Matcher matcher = SEPARATORS_BETWEEN_TAGS.matcher(withSeparators);
    
  final String noSeparators = matcher.replaceAll("><");

  System.out.println(noSeparators);

  return noSeparators;
}
Das geht zwar auch mit String.replaceAll. Da es aber eine sich wiederholende Operation ist, macht es Sinn, das Pattern einmal zu compilen und immer wieder zu verwenden.
 

Xendarii

Mitglied
Ich hab ein neues Problem. Merkwürdigerweise - denn bis eben lief das Programm noch einwandfrei.

Ich lasse mir von meinem HTML-Dokument den Wert eines bestimmten Parameters übergeben, das ist nämlich der Inhalt der Textarea, in die das XML-Dokument geschrieben werden soll.
Bis eben hat das wunderbar geklappt - jetzt bekomme ich plötzlich eine NullPointer-Exception, wenn ich auf das Array zugreifen will, dabei habe ich am Code eigentlich gar nichts geändert. Sieht irgendjemand einen Fehler? Das Servlet, in dem sich der Code-Teil befindet, ist das erste Servlet, das vom HTML-Dokument aufgerufen wird und der Teil befindet sich sogar ganz oben in der doGet-Methode, das heißt, vorher wird kein anderer Code ausgeführt...

Java:
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		syntaxCheck = false;
		xmlBuild = false;
		dom2Build = false;
		
		String[] sA = request.getParameterValues("xml-code");
		
		Enumeration<String> e = request.getParameterNames();
		while(e.hasMoreElements()) {
			String s = e.nextElement();
			if(s.equals("checkXML")) syntaxCheck = true;
			else if(s.equals("buildXML")) xmlBuild = true;
			else if(s.equals("buildDOM")) dom2Build = true;
		}
		
		initialize(request, response);
		
	}
 
N

nillehammer

Gast
Ideen:
- Der Code steht in der doGet-Methode. Formulare werden eher gepostet. Ist bei Dir jetzt Absicht oder evtl. ein Fehler?
- Falls Absicht, schau Dir mal die Request-URL an. Dort müsste der Parameter namens "xml-code" ja auftauchen.
- "xml-code" ist der Name der Textarea. Vielleicht hast du im html-Code was verfuddelt? Du iterierst ja über alle parameternamen. Mach an der Stelle doch einen System.out.println, um zu sehen ob der Parameter überhaupt dabei ist.
 

Xendarii

Mitglied
Danke für die Antwort erst einmal.

Es geht momentan wirklich nur um die eine Zeile mit dem String-Array. Die drei Variablen in der Enumeration sind vorhanden - und auch der Parameter "xml-code" existiert, das habe ich schon nachgeprüft, nur die getParameterValues-Methode wirft, wie gesagt, eine NullPointerException. Normalerweise befindet sie sich auch in einem anderen Servlet, ich habe sie hierhin ausgelagert, um zu überprüfen, ob der Fehler an einer anderen Stelle im Code liegt, aber das tut er wie gesagt nicht, weil schon hier, wenn ich mir die Werte ausgeben lasse, einfach gar nichts erscheint. Parameter existiert also, hat aber keinen Wert und ich hab echt keine Ahnung, wieso. Kann auch nicht am HTML-Dokument liegen, das ist unverändert und wenn ich in die Textarea "<root>" eingebe, sollte ja irgendwas übergeben werden - eigentlich...
 
N

nillehammer

Gast
nur die getParameterValues-Methode wirft, wie gesagt, eine NullPointerException.
Kann sein, dass Du es etwas unglücklich formuliert hast und es nicht so meintest. Aber es ist nahezu ausgeschlossen, dass diese Methode eine NullPointerException wirft (außer vielleicht, wenn Du als Parameternamen null übergibst). Diese Methode kann aber durchaus null returnen. Das tut sie, wenn der Parametername im Request nicht vorkommt. Das ist die einzige in Frage kommende Ursache. Auch wenn Du im Moment noch glaubst, dass er doch drinnen ist. Er ist es nicht. Nach dem Grund dafür musst Du forschen.
 

Xendarii

Mitglied
Also - ja, stimmt, im normalen Betrieb wirft sie die nicht, erst im Debug-Modus. Ich hab jetzt mal Folgendes gemacht:

Java:
PrintWriter out = response.getWriter();
		Enumeration<String> g = request.getParameterNames();
		while(g.hasMoreElements()) {
			String s = g.nextElement();
			out.println(s);
		}
		String[] sA = request.getParameterValues("xml-code");
		for(String s: sA) {
			out.println(s);
		}
		Enumeration<String> f = request.getParameterNames();
		while(f.hasMoreElements()) {
			String s = f.nextElement();
			out.println(s);
		}

Und ich bekomme folgende Ausgabe:

xml-code xml-code

=> die Parameter sind vorhanden - aber ich kriege keinen Wert...
 
N

nillehammer

Gast
Ok, jetzt kommen wir der Sache schon näher. Der Parameter ist also da er enthält nur keinen Wert. Hier hängt es jetzt von der Implementierung des Webcontainers ab, was der draus macht. Jetty returnt für so einen Parameter null, Tomcat einen leeren String (glaube das war so...).

Das beantwortet natürlich noch nicht die Frage, wieso der Wert nicht ankommt. Das kann viele Ursachen haben, von fehlerhaftem Html-Code über Webfirewalls, die Sonderzeichen aus Requests rausfiltern (Stichwort XSS), irgendwelchen Forward- oder Redirectregeln und und und. Eine Analyse aller dieser Faktoren wird über ein Forum glaube ich schwierig.

P.S. Die Ausgabe zu dem von Dir gezeigten Code dürfte wohl eher:
Code:
xml-code
xml-code
sein.
 

Xendarii

Mitglied
Dann ist halt nur die Frage, warum es vor zwei Stunden noch einwandfrei funktioniert hat und jetzt nicht mehr... ich hab in der Zwischenzeit nicht einmal den PC neu gestartet... extrem ungünstig, weil morgen Abgabe ist und ich jetzt echt ratlos bin.

Wie auch immer - danke für die Hilfe. Dass du mir nicht weiterhelfen kannst, ist logisch, wenn es an solchen Faktoren liegt.

Und nein, die Ausgabe ist tatsächlich in einer Zeile.
 

Xendarii

Mitglied
Neue Erkenntnis: Normalen Text kann ich in das Fenster schreiben, den krieg ich im Servlet dann auch ausgegeben - nur bei Tags scheint er irgendwie keine Lust zu haben. Also:

Hallo => geht

<Hallo> => geht nicht

Obwohl's vorher funktioniert hat. Woran kann das liegen? Oo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Html Auslesen Netzwerkprogrammierung 6
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
G seite nach posten eines html-forms laden Netzwerkprogrammierung 0
K HTTP Mit Java HTML Codeauslesen um damit zu arbeiten Netzwerkprogrammierung 7
B HTML mit Webserver und Datenbank verbinden Netzwerkprogrammierung 2
K Probleme bei HTML-Mail-Abruf mit IMAP bei 1und1 Netzwerkprogrammierung 2
C Gerenderte Website nach der ausführung von JavaScript als HTML Code aus lesen Netzwerkprogrammierung 4
Z HTTP HTML Element auslesen in Java Netzwerkprogrammierung 1
J Daten von einem HTML-Textfeld abrufen Netzwerkprogrammierung 3
J Json von Html request einlesen Netzwerkprogrammierung 0
X Einfach Server der HTML img Tags austauscht Netzwerkprogrammierung 1
P nanoHttp upload.html page lädt nicht Netzwerkprogrammierung 4
S HTML mit AJAX auslesen Netzwerkprogrammierung 2
Mike90 Mehspaltige HTML Tabelle parsen Netzwerkprogrammierung 3
S HTTP Ausgabe von Java-Inhalten in HTML Netzwerkprogrammierung 6
D JavaMail: HTML Code einer Mail Netzwerkprogrammierung 9
R HTTP Post HTML Netzwerkprogrammierung 5
Geese HTML Quelltext auslesen ergibt -null- Netzwerkprogrammierung 2
D HTTP html Bildreferenz in responseBody() schreiben Netzwerkprogrammierung 2
B HTTP HTML-Formular aus Java heraus befüllen und bedienen Netzwerkprogrammierung 3
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
R HTML in FileWriter schreiben Netzwerkprogrammierung 5
M Java-Programm als Webserver erzeugt HTML Netzwerkprogrammierung 8
U2nt Texte bzw. Attribute aus HTML etc. bekommen Netzwerkprogrammierung 2
B HTML meets Servlet Netzwerkprogrammierung 6
H HTTP Einloggen auf einer HTML (php) Seite Netzwerkprogrammierung 6
S redirected html auslesen Netzwerkprogrammierung 10
L Passwort + HTML und PHP Netzwerkprogrammierung 9
F Welchen HTML Parser soll ich nehmen? Netzwerkprogrammierung 3
B HTML Formularfelder erkennen und ausfüllen Netzwerkprogrammierung 3
A html - E-mail - Bilder Netzwerkprogrammierung 4
N HTML-Übertragung im lokalen Netzwerk mit Java - wie? Netzwerkprogrammierung 6
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
H HTML-Mails mit JavaMail API Netzwerkprogrammierung 3
M Wie läd man eine HTML Seite in Java runter Netzwerkprogrammierung 2
Z HTML sent by doPost Netzwerkprogrammierung 2
T verbindung zu skript (wie html-formular) Netzwerkprogrammierung 2
A HTML code auslesen klappt nicht ganz Netzwerkprogrammierung 3
M Quellcode einer HTML Seite erhalten Netzwerkprogrammierung 2
M html Code darstellen Netzwerkprogrammierung 2
flashfactor Frage zu HTML-Response Netzwerkprogrammierung 4
T Html-Source über URL in einen String speichern? Netzwerkprogrammierung 16
G Java Chat mit HTML Cleint Netzwerkprogrammierung 3
C POST-Parameter aus HTML-Script lesen Netzwerkprogrammierung 1
D DatagramSocket Empfangen Textarea Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben