2008-10-30 4 views
8

Ich suche nach einer URL zu analysieren, um eine Sammlung der querystring Parameter in Java zu erhalten. Um klar zu sein, muss ich eine gegebene URL (oder einen String-Wert eines URL-Objekts) analysieren, nicht die URL einer Servlet-Anfrage.Alternative zu veraltetem javax.servlet.http.HttpUtils.parseQueryString?

Es scheint, als ob die javax.servlet.http.HttpUtils.parseQueryString Methode die offensichtliche Wahl wäre, aber es ist veraltet.

Gibt es eine alternative Methode, die ich vermisse, oder wurde sie gerade ohne eine äquivalente Ersetzung/erweiterte Funktion veraltet?

+1

Mangel an Lösungen für solche einfachen Aufgaben ist es, was die Leute von Java abstößt. (Und das kommt von einem Java-Typ.) –

Antwort

2

Nun, wie Sie erwähnen, dass die URL nicht von einer Servlet-Anfrage stammt, ist die richtige Antwort, wie üblich, es hängt.

Das Problem mit dem Abfrageteil einer URL ist, dass es keine klare Spezifikation darüber gibt, wie die Parameterduplizierung gehandhabt werden soll.

Betrachten wir zum Beispiel eine URL wie diese:

http://www.example.com?param1=value1&param2=value2&param1=value3 

Was möchten Sie als Wert für param1 erwarten? der erste Wert, der letzte, ein Array? Das Problem ist, dass laut den Spezifikationen alle diese Antworten gültig sind und der Serveranbieter frei ist, eines dieser oder eines anderen zu unterstützen. Einige verwenden die Param1 [] -Notation, um anzugeben, dass sie als ein Array behandelt werden muss, aber auch dies ist keine einheitliche Lösung.

Also die "beste" Lösung ist zu wissen, wie Ihr Ziel-Parameter handhaben, und das Verhalten mit einer selbst erstellten Utility-Klasse nachahmen.

+0

Ich glaube nicht, dass es ein solches Dilemma gibt, die offensichtliche Antwort ist das Array. –

+0

Nun, laut den Spezifikationen ist es nicht. Ich habe an einem Projekt mit Struts und Spring gearbeitet, bei dem nur die letzte Deklaration die vorherigen überschrieben hat. – gizmo

5

Ich denke, die Idee ist, stattdessen die HttpServletRequest zu verwenden. Es gibt die Methoden getParameterMap(), getParameterNames() und getParameterValues ​​() zum Starten.

Es gibt auch die getParameter (String paramname) -Methode, um den Wert einer bestimmten Methode zu erhalten.

Diese machen keinen Unterschied zwischen Querystring-Parameter und Form-Parameter obwohl also, wenn Ihre Absicht war, nach einer Querystring in besonders dann zu suchen, dann denke ich, dass dies nicht helfen würde.

+0

Ich hätte wahrscheinlich in der Frage spezifischer sein sollen. Ich versuche, eine URL zu analysieren, die nicht die URL der Servletanforderung ist, aber als Parameterwert (codierte URL) oder Zeichenfolgenwert aus einem Datenbankdatensatz abgerufen wird. –

0

Soweit ich weiß, gibt es keinen.

Es sollte nicht allzu schwierig sein, selbst einen zu schreiben. Der schwierigste Teil, ich stelle mir vor, würde den URL-Namen/Werte decodieren (was wirklich nicht so schwer ist, wenn Sie darüber nachdenken), und Sie können dafür java.net.URLDecoder#decodeURL(String,String) verwenden.