Assoziative Array-Anfrageparameteranalyse mit Java-Servlet

7

Ist es möglich, die String-Schlüssel aus einer Anfrage wie dieser mit der Java-Servlet-API zu analysieren?

%Vor%

Die Reihenfolge der Werte im zurückgegebenen Array ist nicht die Reihenfolge der Schlüssel (nicht wichtig)

Gelöst: Es ist möglich, die Schlüssel werden als einfache globale Schlüsselfolgen interpretiert. Java erkennt sie nicht als Array. Verwenden Sie Regex

    
MetaChrome 06.08.2011, 13:53
quelle

4 Antworten

10

Nicht direkt. Die [] haben keine spezielle Bedeutung in HTTP-Request-Parametern und werden von der Servlet-API nicht als Array-Schlüssel erkannt (Sie waren vielleicht ein PHP-Programmierer, der tatsächlich einen proprietären Parser dafür hat?). Sie müssen es analysieren und in einer Schleife selbst sammeln.

Zum Beispiel

%Vor%     
BalusC 06.08.2011, 14:02
quelle
17

Sie können mehrere Werte für denselben Parameternamen haben:

%Vor%

In diesem Fall gibt getParameterValues("param1") ein String[] mit 3 Elementen zurück: "value1" , "value2" und "value3" .

In dem von Ihnen angegebenen Beispiel haben Sie 3 verschiedene Parameter definiert: assocArray[key1] , assocArray[key2] und assocArray[key3] . Die Servlet-API wird sie als 3 völlig verschiedene Parameter betrachten, die nichts gemeinsam haben. Sie müssen also getParameter("assocArray[key1]") aufrufen, um "value1" , getParameter("assocArray[key2]") zu erhalten, um "value2" usw. zu erhalten.

    
JB Nizet 06.08.2011 14:01
quelle
1

Nicht möglich, AFAIK. Das http-Protokoll gibt Schlüssel & amp; Nur Wert, kein key[key]=value

Verwenden Sie das Zeichenfolgenarray nach Index - values[0] , values[1] , etc.

Sie können eine Vorverarbeitung durchführen - verwenden Sie request.getParameterMap(..) , parsen Sie die foo[bar] -Syntax selbst und fügen Sie sie in ein Map<String, String>

ein     
Bozho 06.08.2011 13:59
quelle
1
  

Gelöst: Es ist möglich, die Schlüssel werden als einfache globale Schlüsselfolgen interpretiert. Java erkennt sie nicht als Array. Verwenden Sie Regex

Java erkennt sie nicht als (Elemente von) einem Array, weil die URL / URI-Spezifikationen nicht sagen, dass sie ein Array darstellen. Sie sollten nicht erwarten, dass Java (oder andere) Bibliotheken benutzerdefinierte Syntax implementieren, die Sie im Wesentlichen aus der Luft gezogen haben.

Das Verwenden von Regexes zum Analysieren von Eingaben ist im Allgemeinen eine schlechte Idee. Für (vollständige) URLs ist dies eine schlechte Idee, da es eine Vielzahl von kniffligen Möglichkeiten gibt, URLs zu codieren, und es ist für eine Regex schwer, dies zu berücksichtigen.

(Wenn Sie einen Regex verwenden, um einen einzelnen Anforderungsparameter aufzuteilen, sollten Sie in Ordnung sein, da die Servlet-Infrastruktur bereits mit dem primären URL-Parsing und der% -codierung behandelt wurde.)

Ich möchte auch darauf hinweisen, dass Ihre Abfrage String-Syntax fragil ist. Sie verwenden die Zeichen '[' und ']', ohne sie zu umgehen. Gemäß den URL / URI-Spezifikationen sind sie "reservierte Zeichen" und sollten bei Verwendung als "Daten" maskiert werden. Sie werden wahrscheinlich in den meisten Kontexten damit durchkommen, aber Anwendungen, die streng konforme URIs erfordern, lehnen Ihre URLs ab.

    
Stephen C 06.08.2011 15:27
quelle

Tags und Links