Differenza tra getAttribute () e getParameter ()


283

Qual è la differenza tra getAttribute()e getParameter()metodi all'interno della HttpServletRequestclasse?


1
In quale classe / pacchetto / API? Hai provato a leggere JavaDocs per i metodi pertinenti?
Andrew Thompson,


L'attributo è solo per la richiesta http che aiuta i servlet a lavorare insieme
bitfishxyz,

Risposte:


329
  • getParameter()restituisce i parametri di richiesta http. Quelli passati dal client al server. Per esempio http://example.com/servlet?parameter=1. Posso solo tornareString

  • getAttribute()è solo per uso lato server: riempi la richiesta con attributi che puoi utilizzare all'interno della stessa richiesta. Ad esempio: si imposta un attributo in un servlet e lo si legge da un JSP. Può essere utilizzato per qualsiasi oggetto, non solo per la stringa.


3
Suppongo che quando usi qualcosa come ${attrName}una pagina jsp, quali sono gli attributi che hai impostato request.getSession().setAttribute()?
ha9u63ar,

Dato che gli attributi di richiesta sono memorizzati sul lato server, posso impostare l'attributo di richiesta per una richiesta post-reindirizzamento tra server? Voglio inviare informazioni da un server a un altro server in JSF tramite un attributo nella richiesta di reindirizzamento. Sono in grado di inviare tramite una richiesta POST a partire da ora.
user2918640

In questo caso, "Parameter" sembra essere sinonimo di "query string"
BTRUE

getAttribute()non è solo per l'uso sul lato server: è possibile ottenere i dati degli attributi sul front-end - ad esempio nelle pagine jsp e visualizzarli
parsecer

49

Generalmente, un parametro è un valore di stringa che è più comunemente noto per essere inviato dal client al server (ad esempio un post modulo) e recuperato dalla richiesta servlet . L'eccezione frustrante a questo è i parametri iniziali di ServletContext che sono parametri di stringa che sono configurati in web.xml ed esistono sul server.

Un attributo è una variabile del server che esiste all'interno di un ambito specificato, ad esempio:

  • application, disponibile per l'intera durata dell'applicazione
  • session, disponibile per la durata della sessione
  • request, disponibile solo per la durata della richiesta
  • page (Solo JSP), disponibile solo per la pagina JSP corrente

"In generale, un parametro è un valore di stringa" Oltre alle stringhe, cosa potremmo inviare?
Miele

^ Oggetti come nel caso di request.setAttribute
Arijit,

38

request.getParameter ()

Usiamo request.getParameter()per estrarre i parametri di richiesta (ovvero i dati inviati inviando un modulo html). Il valore request.getParameter()restituisce sempre Stringe i dati provengono dal client.

request.getAttribute ()

Usiamo request.getAttribute()per ottenere un oggetto aggiunto all'ambito della richiesta sul lato server, cioè utilizzando request.setAttribute(). Puoi aggiungere qualsiasi tipo di oggetto che ti piace qui, StringsOggetti personalizzati, in effetti qualsiasi oggetto. Aggiungete l'attributo alla richiesta e inoltrate la richiesta a un'altra risorsa, il client non ne è a conoscenza. Quindi tutto il codice che gestisce questo sarebbe tipicamente in JSP / servlet. È possibile utilizzare request.setAttribute()per aggiungere ulteriori informazioni e inoltrare / reindirizzare la richiesta corrente a un'altra risorsa.

Ad esempio, considera first.jsp,

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

e second.jsp:

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

Dal tuo browser, esegui first.jsp? CLIENT = tu e l'output sul tuo browser è

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

La differenza fondamentale tra getAttribute()e getParameter()è che il primo metodo estrae un oggetto Java (serializzato) e l'altro fornisce un valore String. In entrambi i casi viene dato un nome in modo che il suo valore (sia esso stringa o java bean) possa essere cercato ed estratto.


4
Questo è stato un ottimo esempio. Questa dovrebbe essere la risposta accettata. La risposta accettata è corretta ma per i nuovi arrivati ​​un esempio ha chiarito tutto. Grazie.
Catturato il 3

26

È fondamentale sapere che gli attributi non sono parametri .

Il tipo restituito per gli attributi è un oggetto , mentre il tipo restituito per un parametro è una stringa . Quando si chiama il getAttribute(String name)metodo, tenere presente che è necessario eseguire il cast degli attributi.

Inoltre, non ci sono attributi specifici servlet e non ci sono parametri di sessione .

Questo post è stato scritto con lo scopo di connettersi sulla risposta di @ Bozho, come informazioni aggiuntive che possono essere utili per altre persone.


9

La differenza tra getAttribute e getParameter è che getParameter restituirà il valore di un parametro inviato da un modulo HTML o incluso in una stringa di query. getAttribute restituisce un oggetto impostato nella richiesta, l'unico modo per utilizzarlo è in combinazione con un RequestDispatcher. Si utilizza un RequestDispatcher per inoltrare una richiesta a un'altra risorsa (JSP / Servlet). Quindi, prima di inoltrare la richiesta, è possibile impostare un attributo che sarà disponibile per la risorsa successiva.


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")otterrà il valore dalla forma pubblicata della casella di input denominata "testParam" che è "Param client". Lo stamperà quindi, dovresti vedere "Client Param" sullo schermo. Request.getParameter () recupererà quindi un valore inviato dal client. Otterrai il valore sul lato server.

- getAttribute ():, request.getAttribute() questo è tutto fatto sul lato server. Aggiungete l'attributo alla richiesta e inviate la richiesta a un'altra risorsa, il client non ne è a conoscenza. Quindi tutto il codice che gestisce questo sarebbe tipicamente in servlets.getAttribute restituisce sempre oggetto.


4

getParameter - Viene utilizzato per ottenere le informazioni necessarie dalla pagina HTML del cliente

getAttribute - Questo è usato per ottenere i parametri precedentemente impostati in un'altra o nella stessa pagina JSP o Servlet.

Fondamentalmente, se stai inoltrando o stai semplicemente passando da un jsp / servlet a un altro, non c'è modo di avere le informazioni che desideri a meno che tu non scelga di inserirle in un oggetto e usi l'attributo set per memorizzare in una variabile Session.

Utilizzando getAttribute, è possibile recuperare la variabile Session.


3

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

Un "parametro" è una coppia nome / valore inviata dal client al server, in genere da un modulo HTML. I parametri possono avere solo valori String. A volte (ad es. Usando una richiesta GET) li vedrai codificati direttamente nell'URL (dopo il?, Ciascuno nel nome del modulo = valore e ogni coppia separata da un &). Altre volte, sono inclusi nel corpo della richiesta, quando si utilizzano metodi come POST.

Un "attributo" è un meccanismo di archiviazione locale del server: nulla archiviato in attributi con ambito viene mai trasmesso all'esterno del server a meno che non lo si realizzi esplicitamente. Gli attributi hanno nomi String, ma memorizzano i valori Object. Si noti che gli attributi sono specifici di Java (memorizzano oggetti Java), mentre i parametri sono indipendenti dalla piattaforma (sono solo stringhe formattate composte da byte generici).

Esistono quattro ambiti di attributi in totale: "pagina" (solo per JSP e file tag), "richiesta" (limitata alla richiesta del cliente corrente, distrutta dopo il completamento della richiesta), "sessione" (memorizzata nella sessione del cliente, non valida al termine della sessione), "applicazione" (esiste la possibilità per tutti i componenti di accedere durante l'intero ciclo di vita dell'applicazione).

La linea di fondo è: utilizzare i parametri quando si ottengono dati dal client, utilizzare gli attributi con ambito quando si archiviano oggetti sul server per utilizzarli internamente solo dall'applicazione.


3

Un altro caso da utilizzare .getParameter()è quando si inoltra con parametri in jsp:

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

In destination.jsp, puoi accedere in userNamequesto modo:

request.getParameter("userName")

-6

La differenza di base tra getAttribute () e getParameter () è il tipo restituito.

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

2
non sei severo su questo.
Bogdan M.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.