Différence entre getAttribute () et getParameter ()


283

Quelle est la différence entre getAttribute()et getParameter()méthodes au sein de la HttpServletRequestclasse?


1
Dans quelle classe / package / API? Avez-vous essayé de lire les JavaDocs pour les méthodes pertinentes?
Andrew Thompson


l'attribut est uniquement pour la requête http qui aide les servlets à travailler ensemble
bitfishxyz

Réponses:


329
  • getParameter()renvoie les paramètres de requête http. Celles-ci sont passées du client au serveur. Par exemple http://example.com/servlet?parameter=1. Ne peut que revenirString

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


3
Je suppose que lorsque vous utilisez quelque chose comme ${attrName}dans une page jsp, ce sont les attributs que vous définissez en utilisant request.getSession().setAttribute()?
ha9u63ar

Étant donné que l'attribut de demande est stocké côté serveur, puis-je définir l'attribut de demande pour une demande inter-serveur post-redirection-get? Je veux envoyer des informations d'un serveur à un autre serveur dans JSF via un attribut dans la demande de redirection. Je peux envoyer via une demande POST dès maintenant.
user2918640

Dans ce cas, "Paramètre" semble être synonyme de "chaîne de requête"
BTRUE

getAttribute()n'est pas seulement pour une utilisation côté serveur: vous pouvez obtenir les données d'attribut sur le front-end - dans les pages jsp par exemple, et les afficher
parsecer

49

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

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

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

"Généralement, un paramètre est une valeur de chaîne" À part les chaînes, que pourrions-nous envoyer?
Honey

^ Objets comme dans le cas de request.setAttribute
Arijit

38

request.getParameter ()

Nous utilisons request.getParameter()pour extraire les paramètres de demande (c'est-à-dire les données envoyées en publiant un formulaire html). La valeur request.getParameter()renvoie toujours la Stringvaleur et les données proviennent du client.

request.getAttribute ()

Nous utilisons request.getAttribute()pour obtenir un objet ajouté à la portée de la demande côté serveur, c'est-à-dire en utilisant request.setAttribute(). Vous pouvez ajouter n'importe quel type d'objet que vous aimez ici Strings, des objets personnalisés, en fait n'importe quel objet. Vous ajoutez l'attribut à la demande et transférez la demande à une autre ressource, le client ne le sait pas. Donc, tout le code qui le gère serait généralement 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 à propos de 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, exécutez first.jsp? CLIENT = vous et la sortie sur 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 Java (sérialisé) et l'autre fournit une valeur de chaîne. Dans les deux cas, un nom est donné afin que sa valeur (que ce soit une chaîne ou un bean Java) puisse être recherchée et extraite.


4
Ce fut un excellent exemple. Ce devrait être la réponse acceptée. La réponse acceptée est correcte mais pour les nouveaux venus, un exemple a tout clarifié. Je vous remercie.
CapturedTree

26

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

Le type de retour pour les attributs est un objet , tandis que le type de retour pour un paramètre est une chaîne . Lors de l'appel de la getAttribute(String name)méthode, gardez à l'esprit que les attributs doivent être castés.

En outre, il n'existe aucun attribut spécifique à la servlet et aucun paramètre de session .

Ce message est écrit dans le but de se connecter sur la réponse de @ Bozho, en tant qu'informations supplémentaires qui peuvent être utiles pour d'autres personnes.


9

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 en conjonction avec un RequestDispatcher. Vous utilisez un RequestDispatcher pour transférer une demande vers une autre ressource (JSP / Servlet). Donc, avant de transmettre la demande, vous pouvez définir un attribut qui sera disponible pour la ressource suivante.


5

- 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 publié de la zone de saisie nommée "testParam" qui est "Param 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 est 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 qui le gère serait généralement dans servlets.getAttribute toujours renvoyer un objet.


4

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 définis précédemment dans une autre ou la même page JSP ou Servlet.

Fondamentalement, si vous transférez ou passez simplement d'un jsp / servlet à un autre, il n'y a aucun moyen d'avoir les informations que vous souhaitez, sauf si vous choisissez de les placer dans un objet et d'utiliser l'attribut set pour stocker dans une variable de session.

À l'aide de getAttribute, vous pouvez récupérer la variable Session.


3

depuis http://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribute

Un "paramètre" est une paire nom / valeur envoyée du 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 encodés directement dans l'URL (après le?, Chacun 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 du serveur - rien stocké dans des attributs de portée n'est jamais transmis en dehors du serveur, sauf si vous le faites explicitement. 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 (ce ne sont que des chaînes formatées composées d'octets génériques).

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

L'essentiel est: utiliser des paramètres lors de l'obtention de données du client, utiliser des attributs de portée lors du stockage d'objets sur le serveur pour une utilisation interne par votre application uniquement.


3

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 userNamecomme ceci:

request.getParameter("userName")

-6

La différence de base entre getAttribute () et getParameter () est le type de retour.

java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)

2
vous n'êtes pas rigoureux à ce sujet.
Bogdan M.
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.