Diferencia entre getAttribute () y getParameter ()


282

¿Cuál es la diferencia entre getAttribute()y los getParameter()métodos dentro de la HttpServletRequestclase?


1
¿En qué clase / paquete / API? ¿Intentaste leer los JavaDocs para los métodos relevantes?
Andrew Thompson


atributo es sólo para http petición que ayuda a los servlets trabajan juntos
bitfishxyz

Respuestas:


328
  • getParameter()devuelve parámetros de solicitud http. Los pasados ​​del cliente al servidor. Por ejemplo http://example.com/servlet?parameter=1. Solo puede volverString

  • getAttribute()es solo para uso del lado del servidor: completa la solicitud con atributos que puede usar dentro de la misma solicitud. Por ejemplo, establece un atributo en un servlet y lo lee desde un JSP. Se puede usar para cualquier objeto, no solo cadena.


3
Supongo que cuando usas algo como ${attrName}en una página jsp, ¿esos son los atributos que configuras request.getSession().setAttribute()?
ha9u63ar

Dado que los atributos de solicitud se almacenan en el lado del servidor, ¿puedo establecer el atributo de solicitud para una solicitud entre servidores posterior a la redirección-obtención? Quiero enviar información de un servidor a otro servidor en JSF a través de un atributo en la solicitud de redireccionamiento. Puedo enviar a través de una solicitud POST a partir de ahora.
user2918640

En este caso, "Parámetro" parece ser sinónimo de "cadena de consulta"
BTRUE

getAttribute()no es solo para uso del lado del servidor: puede obtener los datos de atributos en el front-end, en páginas jsp, por ejemplo, y mostrarlos
analizador

49

Generalmente, un parámetro es un valor de cadena que se conoce más comúnmente por ser enviado desde el cliente al servidor (por ejemplo, una publicación de formulario) y recuperado de la solicitud de servlet . La excepción frustrante a esto son los parámetros iniciales de ServletContext, que son parámetros de cadena configurados en web.xml y que existen en el servidor.

Un atributo es una variable de servidor que existe dentro de un alcance especificado, es decir:

  • application, disponible para toda la vida de la aplicación
  • session, disponible para toda la vida de la sesión
  • request, solo disponible durante la vigencia de la solicitud
  • page (Solo JSP), disponible solo para la página JSP actual

"Generalmente, un parámetro es un valor de cadena" Aparte de las cadenas, ¿qué podríamos estar enviando?
Miel

^ Objetos como en el caso de request.setAttribute
Arijit

37

request.getParameter ()

Utilizamos request.getParameter()para extraer parámetros de solicitud (es decir, datos enviados mediante la publicación de un formulario html). El valor request.getParameter()siempre devuelve Stringy los datos provienen del cliente.

request.getAttribute ()

Usamos request.getAttribute()para agregar un objeto al alcance de la solicitud en el lado del servidor, es decir, usar request.setAttribute(). Puede agregar cualquier tipo de objeto que desee aquí, StringsObjetos personalizados, de hecho cualquier objeto. Agregue el atributo a la solicitud y reenvíe la solicitud a otro recurso, el cliente no lo sabe. Entonces, todo el código que maneja esto normalmente estaría en JSP / servlets. Puede usar request.setAttribute()para agregar información adicional y reenviar / redirigir la solicitud actual a otro recurso.

Por ejemplo, considere first.jsp,

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

y second.jsp:

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

Desde su navegador, ejecute first.jsp? CLIENT = you y la salida en su navegador es

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

La diferencia básica entre getAttribute()y getParameter()es que el primer método extrae un objeto Java (serializado) y el otro proporciona un valor de cadena. Para ambos casos, se da un nombre para que su valor (ya sea una cadena o un Java Bean) se pueda buscar y extraer.


44
Este fue un gran ejemplo. Esta debería ser la respuesta aceptada. La respuesta aceptada es correcta, pero para los recién llegados, un ejemplo lo aclaró todo. Gracias.
CapturedTree

26

Es crucial saber que los atributos no son parámetros .

El tipo de retorno para atributos es un Objeto , mientras que el tipo de retorno para un parámetro es una Cadena . Al llamar al getAttribute(String name)método, tenga en cuenta que los atributos deben ser emitidos.

Además, no hay atributos específicos de servlet y no hay parámetros de sesión .

Esta publicación está escrita con el propósito de conectarse con la respuesta de @ Bozho, como información adicional que puede ser útil para otras personas.


9

La diferencia entre getAttribute y getParameter es que getParameter devolverá el valor de un parámetro que se envió mediante un formulario HTML o que se incluyó en una cadena de consulta. getAttribute devuelve un objeto que ha establecido en la solicitud, la única forma en que puede usar esto es junto con un RequestDispatcher. Utiliza un RequestDispatcher para reenviar una solicitud a otro recurso (JSP / Servlet). Entonces, antes de reenviar la solicitud, puede establecer un atributo que estará disponible para el siguiente recurso.


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")obtendrá el valor del formulario publicado del cuadro de entrada llamado "testParam", que es "Parámetros del cliente". Luego lo imprimirá, por lo que debería ver "Parámetros del cliente" en la pantalla. Entonces request.getParameter () recuperará un valor que el cliente ha enviado. Obtendrá el valor en el lado del servidor.

- getAttribute (): todo request.getAttribute() esto se realiza en el lado del servidor. USTED agrega el atributo a la solicitud y envía la solicitud a otro recurso, el cliente no lo sabe. Entonces, todo el código que maneja esto normalmente estaría en servlets.getAttribute siempre devuelve el objeto.


4

getParameter - Se utiliza para obtener la información que necesita de la página HTML del cliente

getAttribute - Esto se utiliza para obtener los parámetros establecidos previamente en otra o la misma página JSP o Servlet.

Básicamente, si está reenviando o simplemente va de un jsp / servlet a otro, no hay forma de tener la información que desea a menos que elija colocarlos en un Objeto y usar el atributo set para almacenar en una variable de Sesión.

Con getAttribute, puede recuperar la variable de sesión.


3

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

Un "parámetro" es un par de nombre / valor enviado desde el cliente al servidor, generalmente, desde un formulario HTML. Los parámetros solo pueden tener valores de cadena. A veces (p. Ej., Utilizando una solicitud GET), los verá codificados directamente en la URL (después de?, Cada uno en la forma nombre = valor, y cada par separado por un &). Otras veces, se incluyen en el cuerpo de la solicitud, cuando se utilizan métodos como POST.

Un "atributo" es un mecanismo de almacenamiento local del servidor: nada de lo almacenado en atributos con ámbito se transmite fuera del servidor a menos que explícitamente lo haga. Los atributos tienen nombres de cadena, pero almacenan valores de objeto. Tenga en cuenta que los atributos son específicos de Java (almacenan objetos Java), mientras que los parámetros son independientes de la plataforma (solo son cadenas formateadas compuestas de bytes genéricos).

Hay cuatro ámbitos de atributos en total: "página" (solo para JSP y archivos de etiquetas), "solicitud" (limitada a la solicitud del cliente actual, destruida después de completar la solicitud), "sesión" (almacenada en la sesión del cliente, invalidada después de que finalice la sesión), "aplicación" (existe para que todos los componentes tengan acceso durante toda la vida útil desplegada de su aplicación).

La conclusión es: usar parámetros al obtener datos del cliente, usar atributos de ámbito al almacenar objetos en el servidor para uso interno de su aplicación solamente.


3

Otro caso en el que debe usar .getParameter()es al reenviar parámetros en jsp:

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

En destination.jsp, puedes acceder userNameasí:

request.getParameter("userName")

-6

La diferencia básica entre getAttribute () y getParameter () es el tipo de retorno.

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

2
usted no tiene derecho a esto.
Bogdan M.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.