Unterschied zwischen getAttribute () und getParameter ()

282

Was ist der Unterschied zwischen getAttribute()und getParameter()Methoden innerhalb der HttpServletRequestKlasse?

Priya
quelle
1
In welcher Klasse / Paket / API? Haben Sie versucht, die JavaDocs für die relevanten Methoden zu lesen?
Andrew Thompson
Attribut ist nur für http-Anfrage, die Servlets hilft, zusammenzuarbeiten
bitfishxyz

Antworten:

328
  • getParameter()Gibt http-Anforderungsparameter zurück. Diese wurden vom Client an den Server übergeben. Zum Beispiel http://example.com/servlet?parameter=1. Kann nur zurückkehrenString

  • getAttribute()ist nur für die serverseitige Verwendung vorgesehen - Sie füllen die Anforderung mit Attributen, die Sie innerhalb derselben Anforderung verwenden können. Beispiel: Sie legen ein Attribut in einem Servlet fest und lesen es aus einer JSP. Kann für jedes Objekt verwendet werden, nicht nur für Zeichenfolgen.

Bozho
quelle
3
Ich nehme an, wenn Sie so etwas wie ${attrName}eine JSP-Seite verwenden, sind dies die Attribute, die Sie verwenden request.getSession().setAttribute()?
ha9u63ar
Kann ich ein Anforderungsattribut für eine Post-Redirect-Get-Anforderung zwischen Servern festlegen, da die Anforderungsattribute auf der Serverseite gespeichert sind? Ich möchte Informationen von einem Server zu einem anderen Server in JSF über ein Attribut in einer Umleitungsanforderung senden. Ich kann ab sofort per POST-Anfrage senden.
user2918640
In diesem Fall scheint "Parameter" gleichbedeutend mit "
Abfragezeichenfolge
getAttribute()ist nicht nur für die serverseitige Verwendung
gedacht
49

Im Allgemeinen ist ein Parameter ein Zeichenfolgenwert, von dem am häufigsten bekannt ist, dass er vom Client an den Server gesendet wird (z. B. ein Formularbeitrag) und von der Servlet-Anforderung abgerufen wird . Die frustrierende Ausnahme hiervon sind ServletContext-Anfangsparameter, bei denen es sich um Zeichenfolgenparameter handelt, die in web.xml konfiguriert sind und auf dem Server vorhanden sind.

Ein Attribut ist eine Servervariable, die in einem bestimmten Bereich vorhanden ist, dh:

  • application, verfügbar für die Lebensdauer der gesamten Anwendung
  • session, verfügbar für die Dauer der Sitzung
  • request, nur für die Dauer der Anfrage verfügbar
  • page (Nur JSP), nur für die aktuelle JSP-Seite verfügbar
Krock
quelle
"Im Allgemeinen ist ein Parameter ein Zeichenfolgenwert" Was könnten wir außer Zeichenfolgen senden?
Honig
^ Objekte wie im Fall von request.setAttribute
Arijit
37

request.getParameter ()

Wir verwenden request.getParameter(), um Anforderungsparameter zu extrahieren (dh Daten, die durch das Posten eines HTML-Formulars gesendet werden). Der Wert wird request.getParameter()immer Stringzurückgegeben und die Daten stammen vom Client.

request.getAttribute ()

Wir verwenden request.getAttribute(), um ein Objekt auf der Serverseite zum Anforderungsbereich hinzuzufügen, dh mit request.setAttribute(). Sie können hier einen beliebigen Objekttyp hinzufügen Strings, benutzerdefinierte Objekte, in der Tat ein beliebiges Objekt. Sie fügen das Attribut der Anforderung hinzu und leiten die Anforderung an eine andere Ressource weiter. Der Client weiß davon nichts. Der gesamte Code, der dies behandelt, befindet sich normalerweise in JSP / Servlets. Sie können request.setAttribute()zusätzliche Informationen hinzufügen und die aktuelle Anforderung an eine andere Ressource weiterleiten / umleiten.

Betrachten Sie zum Beispiel first.jsp,

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

und second.jsp:

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

Führen Sie in Ihrem Browser first.jsp? CLIENT = you und die Ausgabe in Ihrem Browser aus

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

Der grundlegende Unterschied zwischen getAttribute()und getParameter()besteht darin, dass die erste Methode ein (serialisiertes) Java-Objekt extrahiert und die andere einen String-Wert bereitstellt. In beiden Fällen wird ein Name angegeben, damit sein Wert (sei es ein String oder eine Java-Bean) nachgeschlagen und extrahiert werden kann.

AVI
quelle
4
Dies war ein großartiges Beispiel. Dies sollte die akzeptierte Antwort sein. Die akzeptierte Antwort ist richtig, aber für Neuankömmlinge hat ein Beispiel alles klargestellt. Danke dir.
CapturedTree
26

Es ist wichtig zu wissen, dass Attribute keine Parameter sind .

Der Rückgabetyp für Attribute ist ein Objekt , während der Rückgabetyp für einen Parameter ein String ist . Beachten Sie beim Aufrufen der getAttribute(String name)Methode, dass die Attribute umgewandelt werden müssen.

Darüber hinaus gibt es keine servletspezifischen Attribute und keine Sitzungsparameter .

Dieser Beitrag wurde mit dem Ziel verfasst, eine Verbindung zu @ Bozhos Antwort herzustellen, als zusätzliche Information, die für andere Personen nützlich sein kann.

oneiros
quelle
9

Der Unterschied zwischen getAttribute und getParameter besteht darin, dass getParameter den Wert eines Parameters zurückgibt, der von einem HTML-Formular gesendet oder in eine Abfragezeichenfolge aufgenommen wurde. getAttribute gibt ein Objekt zurück, das Sie in der Anforderung festgelegt haben. Sie können dies nur in Verbindung mit einem RequestDispatcher verwenden. Sie verwenden einen RequestDispatcher, um eine Anforderung an eine andere Ressource (JSP / Servlet) weiterzuleiten. Bevor Sie die Anforderung weiterleiten, können Sie ein Attribut festlegen, das für die nächste Ressource verfügbar ist.

Abhi
quelle
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")Der Wert wird aus dem angegebenen Formular des Eingabefelds "testParam" abgerufen, das "Client param" lautet. Es wird dann ausgedruckt, sodass "Client Param" auf dem Bildschirm angezeigt werden sollte. Also ruft request.getParameter () einen Wert ab, den der Client übermittelt hat. Sie erhalten den Wert auf der Serverseite.

- getAttribute (): request.getAttribute() Dies ist alles serverseitig erledigt. SIE fügen das Attribut der Anfrage hinzu und SIE senden die Anfrage an eine andere Ressource. Der Client weiß davon nichts. Der gesamte Code, der dies behandelt, befindet sich normalerweise in servlets.getAttribute und gibt immer ein Objekt zurück.

Reetika
quelle
4

getParameter - Wird verwendet, um die benötigten Informationen von der HTML-Seite des Kunden abzurufen

getAttribute - Dies wird verwendet, um die zuvor auf einer anderen oder derselben JSP- oder Servlet-Seite festgelegten Parameter abzurufen.

Grundsätzlich gibt es keine Möglichkeit, die gewünschten Informationen zu erhalten, wenn Sie sie weiterleiten oder nur von einem JSP / Servlet zu einem anderen wechseln, es sei denn, Sie fügen sie in ein Objekt ein und verwenden das set-Attribut zum Speichern in einer Sitzungsvariablen.

Mit getAttribute können Sie die Sitzungsvariable abrufen.

PaulStevens
quelle
3

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

Ein "Parameter" ist ein Name / Wert-Paar, das vom Client an den Server gesendet wird - normalerweise aus einem HTML-Formular. Parameter können nur String-Werte haben. Manchmal (z. B. bei Verwendung einer GET-Anforderung) werden diese direkt in der URL codiert (nach dem ?, Jeweils in der Form name = value und jedes Paar durch ein & getrennt). In anderen Fällen sind sie im Hauptteil der Anforderung enthalten, wenn Methoden wie POST verwendet werden.

Ein "Attribut" ist ein serverlokaler Speichermechanismus. Nichts, was in Attributen mit Gültigkeitsbereich gespeichert ist, wird jemals außerhalb des Servers übertragen, es sei denn, Sie machen dies ausdrücklich möglich. Attribute haben Zeichenfolgennamen, speichern jedoch Objektwerte. Beachten Sie, dass Attribute spezifisch für Java sind (sie speichern Java-Objekte), während Parameter plattformunabhängig sind (sie sind nur formatierte Zeichenfolgen, die aus generischen Bytes bestehen).

Insgesamt gibt es vier Attributbereiche: "Seite" (nur für JSPs und Tag-Dateien), "Anforderung" (beschränkt auf die Anforderung des aktuellen Clients, nach Abschluss der Anforderung zerstört), "Sitzung" (in der Sitzung des Clients gespeichert, ungültig nach Beendigung der Sitzung) "Anwendung" (vorhanden, auf die alle Komponenten während der gesamten bereitgestellten Lebensdauer Ihrer Anwendung zugreifen können).

Das Fazit lautet: Verwenden Sie Parameter, wenn Sie Daten vom Client abrufen, und verwenden Sie Gültigkeitsbereichsattribute, wenn Sie Objekte auf dem Server speichern, die nur von Ihrer Anwendung intern verwendet werden.

Bhavin Shah
quelle
3

Ein weiterer Fall, den Sie verwenden sollten, .getParameter()ist das Weiterleiten mit Parametern in jsp:

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

In destination.jspkönnen Sie userNamewie folgt zugreifen :

request.getParameter("userName")
Hamid Mohayeji
quelle
-6

Der grundlegende Unterschied zwischen getAttribute () und getParameter () ist der Rückgabetyp.

java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)
Chirag Visavadiya
quelle
2
Sie sind nicht richtig darüber.
Bogdan M.