Diferencia entre getAttribute() y getParameter()
¿ Cuáles son las diferencias entre getAttribute()
y los getParameter()
métodos en HttpServletRequest
?
getParameter()
devuelve los parámetros de solicitud http. Estos se pasan del cliente al servidor. Por ejemplohttp://example.com/servlet?parameter=1
. Sólo pueden regresarString
.getAttribute()
es solo para uso del lado del servidor : usted completa la solicitud con atributos que puede usar dentro de la misma solicitud. Por ejemplo, establece un atributo en aServlet
y lo lee desde un JSP. Estos se pueden usar para cualquier objeto, no solo para cadenas.
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 frustrante excepción a esto son los parámetros iniciales de ServletContext , que son parámetros de cadena que se configuran en web.xml y existen en el servidor.
Un atributo es una variable del servidor que existe dentro de un alcance específico, es decir:
application
, disponible durante la vida de toda la aplicaciónsession
, disponible durante la duración de la sesiónrequest
, solo disponible durante la vida de la solicitudpage
(solo JSP), disponible solo para la página JSP actual
solicitud.getParameter()
Lo 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 String
y los datos provienen del cliente.
solicitud.getAttribute()
Usamos request.getAttribute()
para agregar un objeto al alcance de la solicitud en el lado del servidor, es decir, usando request.setAttribute()
. Puede agregar cualquier tipo de objeto que desee aquí, Strings
objetos personalizados, de hecho, cualquier objeto. Agrega el atributo a la solicitud y reenvía 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 usarlo 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 segundo.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 el resultado en su navegador será
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. En ambos casos se proporciona un nombre para que se pueda buscar y extraer su valor (ya sea una cadena o un bean Java).
Es crucial saber que los atributos no son parámetros .
El tipo de retorno de los atributos es un Objeto , mientras que el tipo de retorno de un parámetro es una Cadena . Al llamar al getAttribute(String name)
método, tenga en cuenta que los atributos se deben convertir.
Además, no hay atributos específicos del servlet ni 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.