2009-05-26 4 views
8

In Java, il campo attributo di un oggetto HttpServletRequest può essere recuperata con il metodo getAttribute:In che modo il campo di attributo di HttpServletRequest si associa a una richiesta HTTP non elaborata?

String myAttribute = request.getAttribute("[parameter name]"); 

Dove HttpServletRequest attributo dati sono memorizzati in una richiesta HTTP crudo? È nel corpo della richiesta?

Ad esempio, sto cercando di creare una richiesta HTTP GET raw che verrà inviata al mio servlet utilizzando un programma client. Il mio metodo servlet.doGet() sarebbe qualcosa di simile:

public void doGet(HttpServletRequest request, HttpServletResponse response) 
{ 
    String myAttribute = request.getAttribute("my.username"); 
    ... 
} 

Dove devo inserire i dati del 'my.username' nella richiesta HTTP grezzo in modo che il 'MyAttribute' String riceve il valore "John Doe" dopo l'attribuzione?

risposta

12

Per aggiungere a @ di gid risposta, attributi non sono presenti in alcun modo nella richiesta HTTP mentre viaggia sopra il filo. Vengono creati (dal codice) durante l'elaborazione della richiesta. Un uso molto comune è quello di avere un set di server (alias create) alcuni attributi e quindi inoltrare a un JSP che utilizzerà tali attributi. Cioè, una richiesta HTTP arriva e viene inviata a un servlet. Il Servlet allega alcuni attributi. Viene eseguita un'ulteriore elaborazione sul lato server, inviando infine la pagina a un JSP, in cui vengono utilizzati gli attributi. La risposta è generata nel JSP. La richiesta HTTP e la risposta HTTP non contengono alcun attributo. Gli attributi sono al 100% puramente informazioni sul lato server.

Quando una singola richiesta HTTP è stata completata, gli attributi diventano disponibili per la garbage collection (a meno che non vengano mantenuti in un altro percorso, ad esempio una sessione). Gli attributi sono associati solo a un singolo oggetto richiesta.

17

Giusto per essere chiari come penso, la risposta di @ Jon non lo rende perfettamente chiaro. I valori per getAttribute e setAttribute su HttpServletRequest non sono presenti su ciò che viene effettivamente inviato via cavo, sono solo lato server.

// only visible in this request and on the server 
request.getAttribute("myAttribute"); 

// value of the User-Agent header sent by the client 
request.getHeader("User-Agent"); 

// value of param1 either from the query string or form post body 
request.getParameter("param1"); 
+0

Infatti, grazie per aver chiarito Gareth :) – Jon

+0

no worries ... ta –

3

Penso che quello che sta realmente chiedendo sia "come faccio ad avere i parametri nel mio programma", non gli attributi. Se questa è la domanda, quindi inviare parametri nella richiesta GET come parte dell'URL (dopo un punto interrogativo, http://myhost.com/myapp?name=joe&age=26) quindi recuperarli utilizzando request.getParameter ("nome") e request.getParameter ("age"), o qualsiasi altra cosa hai bisogno.