2015-03-27 2 views
2

j'ai une page JSP qui est accessible à partir d'une URL commeJSP getQueryString() et getParameterMap() retour différents paramètres

http://localhost/products.jsp 

(donc sans une chaîne de requête), alors que cette page contient d'autres JSP avec:

<jsp:include page="product.jsp"> 
    <jsp:param value="1" name="recordNumber"/> 
</jsp:include> 

intérieur product.jsp il y a un appel à une méthode Java qui reçoit l'objet request:

NavigationUtils.getProductUrl(request) 

Cette logique de méthode est pilotée par les paramètres de requête.
Ce que je reçois est que:

  1. request.getQueryString() retours null
  2. request.getParameterMap() a une entrée pour "recordNumber"

Est-ce comportement standard ou que je fais quelque chose de mal?

J'ai consulté les documents sur HttpServletRequest.getQueryString() et ServletRequest.getParameterMap(), mais je ne trouve pas ce comportement décrit ni aucune référence à une manipulation dépendant du conteneur qui peut donner des résultats différents.

Le problème principal est que je peux casser le code existant en utilisant getParameterMap() au lieu de getQueryString(), donc tout conseil sur ce serait utile.

+1

Je transformerais la JSP en un fichier de balise JSP et passerais le paramètre en tant qu'attribut de balise, au lieu d'utiliser un include et en passant le paramètre en tant que paramètre de requête "faux". Cela aurait l'avantage supplémentaire de pouvoir le passer comme un Integer propre, plutôt que comme un String. –

+0

@JBNizet Mon intervalle de réécriture de code est plus étroit que ça, en fait je préfère ne pas toucher de JSP, je suis ici car le code existant (qui est profond dans la logique webapp) empêche ma nouvelle implémentation de fonctionner comme prévu , mais merci pour la suggestion. – watery

Répondre

1

La chaîne de requête n'est rien de plus qu'un mécanisme pour encoder des paramètres dans une requête, mais ce n'est pas le seul. Généralement, c'est utilisé lorsqu'un navigateur envoie une requête GET au serveur. Un autre mécanisme serait dans le corps d'une requête POST codée par un formulaire.

Dans votre cas, la JSP souhaite inclure les résultats d'une autre JSP, qui se déroule tous du côté serveur. Le conteneur de servlet peut passer des paramètres d'une JSP à l'autre sans avoir à coder le paramètre sur la chaîne de requête (ce qui serait inutilement inefficace).

L'utilisation de getParameter ou getParameterMap est la solution la plus générale. L'utilisation de getQueryString n'a vraiment de sens que dans des circonstances particulières, lorsque c'est exactement ce dont vous avez besoin pour regarder l'art.

+0

Cela semble raisonnable, je n'y ai pas pensé. – watery