web-dev-qa-db-fra.com

Différence entre getAttribute () et getParameter ()

Quelle est la différence entre les méthodes getAttribute() et getParameter() de la classe HttpServletRequest?

268
priya
  • getParameter() renvoie les paramètres de la requête http. Ceux passés du client au serveur. Par exemple, http://example.com/servlet?parameter=1. Ne peut que retourner String

  • getAttribute() est destiné à une utilisation côté serveur uniquement. Vous remplissez la requête avec des attributs que vous pouvez utiliser dans la même requête. Par exemple, vous définissez un attribut dans un servlet et le lisez à partir d'un fichier JSP. Peut être utilisé pour n'importe quel objet, pas seulement une chaîne.

307
Bozho

Généralement, un paramètre est une valeur de chaîne qui est généralement connue pour être envoyée du client au serveur (par exemple, une publication de formulaire) et extraite de demande de servlet . L'exception frustrante à cela est paramètres initiaux ServletContext , qui sont des paramètres de chaîne configurés dans web.xml et existant sur le serveur.

Un attribut est une variable de serveur qui existe dans une portée spécifiée, à savoir:

  • application, disponible pour toute la vie de l'application
  • session, disponible pour la vie de la session
  • request, disponible uniquement pour la vie de la demande
  • page (JSP uniquement), disponible pour la page JSP actuelle uniquement
43
krock

request.getParameter ()

Nous utilisons request.getParameter() pour extraire les paramètres de requête (c’est-à-dire les données envoyées en postant un formulaire html). La request.getParameter() renvoie toujours la valeur String et les données proviennent du client.

request.getAttribute ()

Nous utilisons request.getAttribute() pour obtenir un objet ajouté à la portée de la requête côté serveur, c'est-à-dire en utilisant request.setAttribute(). Vous pouvez ajouter n'importe quel type d'objet que vous aimez ici, Strings, objets personnalisés, en fait n'importe quel objet. Vous ajoutez l'attribut à la demande et transmettez la demande à une autre ressource, le client ne le sait pas. Donc tout le code manipulant ceci serait typiquement dans JSP/servlets. Vous pouvez utiliser request.setAttribute() pour ajouter des informations supplémentaires et transférer/rediriger la demande actuelle vers une autre ressource.

Par exemple, pensez à first.jsp,

//First Page : first.jsp
<%@ page import="Java.util.*" import="Java.io.*"%>
<% request.setAttribute("PAGE", "first.jsp");%>
<jsp:forward page="/second.jsp"/>

et second.jsp:

<%@ page import="Java.util.*" import="Java.io.*"%>
From Which Page : <%=request.getAttribute("PAGE")%><br>
Data From Client : <%=request.getParameter("CLIENT")%>

Depuis votre navigateur, lancez first.jsp? CLIENT = you et le résultat de votre navigateur est

From Which Page : *first.jsp*
Data From Client : you

La différence fondamentale entre getAttribute() et getParameter() est que la première méthode extrait un objet (<sérialisé) Java et que l'autre fournit une valeur String. Dans les deux cas, un nom est donné afin que sa valeur (chaîne ou bean Java) puisse être recherchée et extraite.

32
AVI

Il est crucial de savoir que attributs ne sont pas paramètres.

Le type de retour pour les attributs est un Object, alors que le type de retour pour un paramètre est un String. Lorsque vous appelez la méthode getAttribute(String name), n'oubliez pas que les attributs doivent être convertis.

De plus, il y a pas d'attributs spécifiques à la servlet, et il n'y a pas paramètres de session.

Ce message est écrit dans le but de se connecter à la réponse de @ Bozho, en tant qu'information supplémentaire pouvant être utile à d'autres personnes.

26
oneiros

La différence entre getAttribute et getParameter est que getParameter renverra la valeur d'un paramètre qui a été soumis par un formulaire HTML ou qui a été inclus dans une chaîne de requête. getAttribute renvoie un objet que vous avez défini dans la demande. La seule façon de l'utiliser est avec un RequestDispatcher. Vous utilisez un RequestDispatcher pour transférer une demande à une autre ressource (JSP/Servlet). Donc, avant de transmettre la demande, vous pouvez définir un attribut qui sera disponible pour la ressource suivante.

9
Abhi

-getParameter ():

<html>
<body>
<form name="testForm" method="post" action="testJSP.jsp">
<input type="text" name="testParam" value="ClientParam">
<input type="submit">
</form>
</body>
</html>

    <html>
    <body>
    <%
    String sValue = request.getParameter("testParam");
    %>
    <%= sValue %>
    </body>
    </html>

request.getParameter("testParam") obtiendra la valeur du formulaire envoyé de la zone de saisie nommée "testParam", qui est "paramètre client". Il l’imprimera alors, vous devriez donc voir "Client Param" à l’écran. Ainsi, request.getParameter () récupérera une valeur que le client a soumise. Vous obtiendrez la valeur côté serveur.

-getAttribute ():request.getAttribute(), tout cela se fait côté serveur. VOUS ajoutez l'attribut à la demande et VOUS soumettez la demande à une autre ressource, le client ne le sait pas. Ainsi, tout le code traitant de ce type serait généralement dans servlets.getAttribute retournera toujours un objet.

5
Reetika

getParameter - Est utilisé pour obtenir les informations dont vous avez besoin à partir de la page HTML du client

getAttribute - Ceci est utilisé pour obtenir les paramètres précédemment définis dans une autre page ou la même page JSP ou Servlet.

Fondamentalement, si vous transférez ou passez simplement d’un jsp/servlet à un autre, il n’est pas possible d’obtenir les informations souhaitées à moins de choisir de les placer dans un objet et d’utiliser l’attribut set pour les stocker dans une variable de session.

Avec getAttribute, vous pouvez récupérer la variable de session.

4
PaulStevens

Un autre cas où vous devriez utiliser .getParameter() est lors du transfert avec des paramètres dans jsp:

<jsp:forward page="destination.jsp">
    <jsp:param name="userName" value="hamid"/>
</jsp:forward>

Dans destination.jsp, vous pouvez accéder à userName comme ceci:

request.getParameter("userName")
3
Hamid Mohayeji

à partir de http://www.coderanch.com/t/361868/Servlets/Java/request-getParameter-request-getAttribute

Un "paramètre" est une paire nom/valeur envoyée par le client au serveur, généralement à partir d'un formulaire HTML. Les paramètres ne peuvent avoir que des valeurs de chaîne. Parfois (par exemple, en utilisant une requête GET), vous les verrez codées directement dans l’URL (après le?, Chacune sous la forme nom = valeur, et chaque paire séparée par un &). D'autres fois, ils sont inclus dans le corps de la demande, lors de l'utilisation de méthodes telles que POST.

Un "attribut" est un mécanisme de stockage local au serveur - rien stocké dans les attributs étendus n'est jamais transmis en dehors du serveur, à moins que cela ne soit explicitement prévu. Les attributs ont des noms de chaîne, mais stockent des valeurs d'objet. Notez que les attributs sont spécifiques à Java (ils stockent des objets Java), tandis que les paramètres sont indépendants de la plate-forme (il ne s'agit que de chaînes formatées composées d'octets génériques).

Il existe au total quatre portées d'attributs: "page" (pour les JSP et les fichiers de balises uniquement), "demande" (limitée à la demande du client actuel, détruite à la fin de la demande), "session" (stockée dans la session du client, invalidée). une fois la session terminée), "application" (existe pour que tous les composants puissent accéder pendant toute la durée de vie déployée de votre application).

La ligne de fond est la suivante: utiliser des paramètres lors de l'obtention de données du client, utiliser des attributs étendus lors du stockage d'objets sur le serveur pour une utilisation en interne par votre application uniquement.

3
Bhavin Shah