205 votes

Comment récupérer les paramètres de l'URL avec JSP

En JSP, comment récupérer les paramètres de l'URL ?

Par exemple, j'ai une URL www.somesite.com/Transaction_List.jsp?accountID=5
Je veux avoir le 5.

Existe-t-il un request.getAttribute( "accountID" ) comme pour les sessions ou quelque chose de similaire ?

259voto

Pascal Thivent Points 295221

A propos de la Objets implicites de la Langage d'expression unifié le Tutoriel Java EE 5 écrit :

Objets implicites

Le langage d'expression JSP définit un ensemble d'objets implicites :

  • pageContext : Le contexte de la page JSP. Fournit l'accès à divers objets, notamment :
    • servletContext : Le contexte de la servlet de la page JSP et de tout composant Web contenu dans la même application. Voir Accès au contexte Web.
    • session : L'objet de session pour le client. Voir Maintien de l'état du client.
    • request : La requête déclenchant l'exécution de la page JSP. Voir Obtenir des informations à partir de requêtes .
    • response : La réponse renvoyée par la page JSP. Voir Construction des réponses.
  • En outre, plusieurs objets implicites sont disponibles et permettent d'accéder facilement aux objets suivants :
    • param : Fait correspondre un nom de paramètre de demande à une valeur unique
    • paramValues : Fait correspondre un nom de paramètre de demande à un tableau de valeurs.
    • header : Fait correspondre un nom d'en-tête de demande à une valeur unique
    • headerValues : Fait correspondre un nom d'en-tête de demande à un tableau de valeurs.
    • cookie : Fait correspondre un nom de cookie à un cookie unique
    • initParam : Fait correspondre un nom de paramètre d'initialisation de contexte à une valeur unique
  • Enfin, il existe des objets qui permettent d'accéder aux différentes variables scopées décrites dans la section Utilisation des objets scopés.
    • pageScope : Transpose les noms de variables de la page à leurs valeurs.
    • requestScope : Transférer les noms de variables de la demande à leurs valeurs.
    • sessionScope : Fait correspondre les noms de variables de la session à leurs valeurs.
    • applicationScope : Faire correspondre les noms des variables de l'application à leurs valeurs.

Les parties intéressantes sont en gras :)

Donc, pour répondre à votre question, vous devriez pouvoir y accéder comme ceci (en utilisant EL) :

${param.accountID}

Ou, en utilisant Scriptlets JSP (non recommandé) :

<%
    String accountId = request.getParameter("accountID");
%>

191voto

SjB Points 6823

Dans une demande GET, les paramètres de la demande sont extraits de la chaîne de requête (les données qui suivent le point d'interrogation sur l'URL). Par exemple, l'URL http://hostname.com?p1=v1&p2=v2 contient deux paramètres de demande - - p1 et p2. Dans une demande POST, les paramètres de la demande proviennent à la fois de la chaîne de requête et des données affichées qui sont codées dans le corps de la demande.

Cet exemple montre comment inclure la valeur d'un paramètre de requête dans la sortie générée :

Hello <b><%= request.getParameter("name") %></b>!

Si la page a été accédée avec l'URL :

http://hostname.com/mywebapp/mypage.jsp?name=John+Smith

la sortie résultante serait :

Hello <b>John Smith</b>!

Si le nom n'est pas spécifié dans la chaîne de requête, le résultat sera le suivant :

Hello <b>null</b>!

Cet exemple utilise la valeur d'un paramètre de requête dans un scriptlet :

<%
    if (request.getParameter("name") == null) {
        out.println("Please enter your name.");
    } else {
        out.println("Hello <b>"+request. getParameter("name")+"</b>!");
    }
%>

87voto

Taylor Leese Points 18895

Utilisez le langage EL (JSP Expression Language) :

${param.accountID}

1 votes

Est-ce que cela gère le décodage des URL ?

0 votes

@vikingsteve oui il le fait

2 votes

Mais il ne gère pas le réencodage en entités HTML/XML, ce qui est nécessaire pour la prévention XSS. Utilisez JSTL <c:out value="${param.accountID}" /> pour le faire.

21voto

Léa Massiot Points 303

Si je peux ajouter un commentaire ici...

<c:out value="${param.accountID}"></c:out>

ne fonctionne pas pour moi (il imprime un 0).

Au lieu de cela, ceci fonctionne :

<c:out value="${param['accountID']}"></c:out>

0 votes

Si vous avez besoin de vérifier spécifiquement si une valeur se trouve dans les arguments de la requête URL (et, par exemple, sera soumise dans le cadre d'une soumission de formulaire), vous pouvez regarder ${pageContext.request.queryString} - mais il n'est pas décomposé en une belle carte comme l'est params.

5voto

request.getParameter("accountID") est ce que vous recherchez. Cela fait partie de l'API Java Servlet. Voir http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X