2009-05-26 15 views
8

En Java, el campo de atributo de un objeto HttpServletRequest se pueden recuperar usando el método getAttribute:¿Cómo se asigna el campo de atributo de un HttpServletRequest a una solicitud HTTP sin procesar?

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

donde se almacena el HttpServletRequest datos de atributos en una solicitud HTTP crudo? ¿Está en el cuerpo de la solicitud?

Por ejemplo, estoy intentando crear una solicitud GET HTTP sin procesar que se enviará a mi servlet utilizando algún programa cliente. Mi método servlet.doGet() sería algo como esto:

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

¿Dónde debo poner los datos de la 'my.username' en la petición HTTP prima para que el 'MyAttribute' Cadena recibe el valor "John Doe" después de la atribución?

Respuesta

12

Para añadir a la respuesta de @ gid, los atributos no están presentes de alguna manera en la petición HTTP a medida que viaja a través del cable. Se crean (mediante su código) al procesar la solicitud. Un uso muy común es tener un conjunto de servidores (es decir, crear) algunos atributos y luego reenviar a un JSP que hará uso de esos atributos. Es decir, llega una solicitud HTTP y se envía a un servlet. El servlet une algunos atributos. Se realiza un procesamiento adicional en el lado del servidor, que finalmente envía la página a un JSP, donde se usan los atributos. La respuesta se genera en el JSP. La solicitud HTTP y la respuesta HTTP no contienen ningún atributo. Los atributos son información 100% puramente del lado del servidor.

Cuando se ha completado una única solicitud HTTP determinada, los atributos están disponibles para la recolección de elementos no utilizados (a menos que persistan en otra ubicación, como una sesión). Los atributos solo están asociados con un único objeto de solicitud.

17

Solo para ser claro, ya que creo que la respuesta de @ Jon no lo deja perfectamente claro. Los valores de getAttribute y setAttribute en HttpServletRequest no están presentes en lo que realmente se envía por cable, solo están en el lado del servidor.

// 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

De hecho, gracias por aclarar Gareth :) – Jon

+0

no te preocupes ... ta –

3

Creo que lo que realmente está preguntando es "¿cómo obtengo los parámetros en mi programa?", No atributos. Si esa es la pregunta, envíe los parámetros en la solicitud GET como parte de la URL (después de un signo de interrogación, http://myhost.com/myapp?name=joe&age=26) y luego recíbelos utilizando request.getParameter ("nombre") y request.getParameter ("age"), o lo que sea necesitas.

Cuestiones relacionadas