Comment obtenir des paramètres de l'URL avec JSP


192

Dans JSP, comment puis-je obtenir les paramètres de l'URL?

Par exemple, j'ai une URL que www.somesite.com/Transaction_List.jsp?accountID=5
je veux obtenir 5.

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

Réponses:


178

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 sont extraits à la fois de la chaîne de requête et des données publiées qui sont codées dans le corps de la demande.

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

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

Si la page a été accessible 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, la sortie serait:

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>!");
    }
%>

96
Les scriptlets sont considérés comme une mauvaise pratique.
BalusC

13
N'oubliez pas xmlEncode .. ceci est actuellement vulnérable aux xss réfléchis
Esailija

4
-1 pour la vulnérabilité XSS. Serait également -1 pour l'utilisation d'un scriptlet lorsque le travail peut être fait en utilisant EL si je pouvais voter deux fois. Sérieusement, NE FAITES PAS CELA .
Jules

Suggérer l'utilisation de scriptlets lorsqu'une meilleure solution existe nuit à la qualité du code.
Suketu Bhuta

2
En ce qui concerne "Les scriptlets sont considérés comme une mauvaise pratique", voir cette réponse dans une autre question pour des alternatives.
Pixelstix

242

À propos des objets implicites du langage d'expression unifiée , le didacticiel 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. Donne accès à divers objets, notamment:
    • servletContext: Le contexte du servlet de la page JSP et des composants Web contenus dans la même application. Voir Accès au contexte Web.
    • session: Objet de session pour le client. Voir Gestion de l'état du client.
    • request: La requête déclenchant l'exécution de la page JSP. Voir Obtention d'informations à partir de demandes .
    • response: La réponse renvoyée par la page JSP. Voir Création de réponses.
  • De plus, plusieurs objets implicites sont disponibles qui permettent un accès facile aux objets suivants:
    • param: Mappe un nom de paramètre de demande à une valeur unique
    • paramValues: Mappe un nom de paramètre de demande à un tableau de valeurs
    • header: Mappe un nom d'en-tête de demande à une valeur unique
    • headerValues: Mappe un nom d'en-tête de demande à un tableau de valeurs
    • cookie: Mappe un nom de cookie à un seul cookie
    • initParam: Mappe 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 de portée décrites dans Utilisation des objets de portée.
    • pageScope: Mappe les noms de variable de portée de page à leurs valeurs
    • requestScope: Mappe les noms de variables de portée de demande à leurs valeurs
    • sessionScope: Mappe les noms de variables de portée de session à leurs valeurs
    • applicationScope: Mappe les noms de variables étendues à 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, à l'aide de scriptlets JSP (non recommandé):

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

Y a-t-il quelque chose que vous devez faire pour activer EL? J'utilise jboss6 et lorsque j'utilise $ {param.accountID}, il est traité comme du texte normal provenant du navigateur.
simgineer

@simgineer Premièrement, le fichier DOIT être JSP, pas seulement HTML simple. Lisez les rubriques suivantes: Langage d'expression, n'affiche pas de valeur variable , les expressions EL ne sont pas évaluées dans JBoss AS 4.2.2 , Langage d'expression dans JSP ne fonctionne pas .
informatik01

81

Utilisez EL (JSP Expression Language):

${param.accountID}


1
Est-ce que cela gère le décodage d'URL?
vikingsteve

@vikingsteve oui c'est le cas
Neil McGuigan

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

21

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, cela fonctionne:

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


À noter: param inclut plus de valeurs que les arguments de requête URL (par exemple, les valeurs dans la carte du modèle). si vous devez vérifier spécifiquement si une valeur est dans les arguments de requête URL (et, par exemple, sera soumise dans le cadre d'une soumission de formulaire), vous pouvez regarder $ {pageContext.request.queryString} - mais elle n'est pas décomposée en un belle carte comme params est.
Paul



0

exemple, vous vouliez supprimer l'enregistrement de sujet avec son subject_id

@RequestMapping(value="subject_setup/delete/{subjectid}",method = RequestMethod.GET)
public ModelAndView delete(@PathVariable int subjectid) {
    subjectsDao.delete(subjectid);
    return new ModelAndView("redirect:/subject_setup");
}

et le paramètre sera utilisé pour la saisie de votre requête

public int delete(int subjectid) {
    String sql = "update tbl_subject set isdeleted= '1' where id = "+subjectid+"";
    return template.update(sql);
}

0

www.somesite.com/Transaction_List.jsp?accountID=5

Pour cela, URLil existe un appel de méthode request.getParameteren java, si vous voulez un nombre ici converti en int, de même pour la valeur de chaîne convertie en string. donc pour votre besoin, il suffit de copier au-delà de la ligne ci-dessous dans la page,

int  accountId =(int)request.getParameter("accountID");

vous pouvez maintenant appeler cette valeur en utilisant accountIdtoute la page.

voici le accountIdnom du paramètre, vous pouvez également obtenir plusieurs paramètres en utilisant ceci, mais cela ne fonctionne pas. Cela ne fonctionnera avec la GETméthode que si vous appuyez sur POSTrequest, leur sera une erreur.

J'espère que cela vous sera utile.


0

page 1: page de détail 2: <% String id = request.getParameter ("userid");%> // vous pouvez désormais utiliser id pour la requête sql du produit de détail hsql

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.