Java de Lecture non décodé URL de la Servlet

Nous allons présumer que j'ai des chaines de caractères comme '=&?/;#+%' une partie de mon URL, disons le comme ceci:

example.com/servletPath/someOtherPath/myString/something.html?a=b&c=d#asdf

où myString est au-dessus de la chaîne. J'ai encodé partie essentielle si l'URL ressemble à

example.com/servletPath/someOtherPath/%3D%26%3F%2F%3B%23%2B%25/something.html?a=b&c=d#asdf

So far So good.

Quand je suis dans la servlet et j'ai lu tout de request.getRequestURI(), request.getRequestURL() ou request.getPathInfo(), la valeur de retour est déjà décodé, alors je me strilng comme

someOtherPath/=&?/;#+%/something.html?a=b&c=d#asdf

et je ne peux pas la différence entre les vraies caractères spéciaux et codé.

J'ai résolu de problème particulier en interdisant au-dessus de caractères au total, qui travaille dans cette situation, mais je me demande encore est-il possible d'obtenir non décodé de l'URL dans la classe de servlet.

ENCORE un AUTRE EDIT: Quand j'ai atteint ce problème hier soir, j'étais trop fatigué pour remarquer ce qui se passe réellement, ce qui est encore plus bizarre! J'ai servlet mappé sur, disons /servletPath/* une fois que je peux mettre ce que je veux obtenir mon servlet de répondre en fonction sur le reste du chemin, sauf quand il y a %2F dans le chemin d'accès. Dans ce cas demande ne fait jamais les servlet, et je reçois 404! Si j'ai mis " /" au lieu de %2F cela fonctionne bien. Je suis en cours d'exécution de Tomcat 6.0.14 Java-1.6.0-04 sur Linux.

si la chaîne est déjà décodé, pourquoi l'aurait-il un %2f?
Quelle est la valeur retournée et que voulez-vous qu'il soit? Et est-il pertinent? Je ne peux pas vraiment dire quel est le problème.
Je n'ai pas l'obtenir.
Sonne comme le cas d'essayer de décoder de façon illégale et URL mal formée. L'exécution en dehors de la spécification de ce genre est susceptible de causer un tas de problèmes. Pouvez-vous avoir le contrôle pour changer la façon dont les données sont transmises? par exemple déplacer pour publier des données?
Pour toute personne tombant sur ce à une date ultérieure, le problème de la %2F est due à un CGI précaution de sécurité.

OriginalL'auteur Slartibartfast | 2009-06-08