Qual é a diferença entre getAttribute()
e getParameter()
métodos dentro da HttpServletRequest
classe?
Qual é a diferença entre getAttribute()
e getParameter()
métodos dentro da HttpServletRequest
classe?
Respostas:
getParameter()
retorna parâmetros de solicitação http. Aqueles transmitidos do cliente para o servidor. Por exemplo http://example.com/servlet?parameter=1
. Só pode retornarString
getAttribute()
é apenas para uso do lado do servidor - você preenche a solicitação com atributos que podem ser usados na mesma solicitação. Por exemplo - você define um atributo em um servlet e o lê em um JSP. Pode ser usado para qualquer objeto, não apenas para string.
${attrName}
em uma página jsp, esses são os atributos que você define usando request.getSession().setAttribute()
?
getAttribute()
não é apenas para uso do servidor: você pode obter os dados do atributo no front-end - nas páginas jsp, por exemplo, e exibi-los
Geralmente, um parâmetro é um valor de sequência que é mais conhecido por ser enviado do cliente para o servidor (por exemplo, uma postagem de formulário) e recuperado da solicitação de servlet . A exceção frustrante a isso são os parâmetros iniciais do ServletContext, que são parâmetros de sequência configurados no web.xml e existem no servidor.
Um atributo é uma variável do servidor que existe dentro de um escopo especificado, ou seja:
application
, disponível durante toda a vida útil do aplicativosession
, disponível durante toda a vida da sessãorequest
, disponível apenas para a vida útil da solicitaçãopage
(Apenas JSP), disponível apenas para a página JSP atual request.getParameter ()
Usamos request.getParameter()
para extrair parâmetros de solicitação (ou seja, dados enviados postando um formulário html). O valor request.getParameter()
sempre retorna String
e os dados vêm do cliente.
request.getAttribute ()
Usamos request.getAttribute()
para adicionar um objeto ao escopo da solicitação no servidor, ou seja, usando request.setAttribute()
. Você pode adicionar qualquer tipo de objeto que desejar aqui, Strings
objetos personalizados, de fato qualquer objeto. Você adiciona o atributo à solicitação e encaminha a solicitação para outro recurso, o cliente não sabe disso. Portanto, todo o código que manipula isso normalmente estaria em JSP / servlets. Você pode usar request.setAttribute()
para adicionar informações extras e encaminhar / redirecionar a solicitação atual para outro recurso.
Por exemplo, considere about 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")%>
No seu navegador, execute first.jsp? CLIENT = você e a saída no seu navegador é
From Which Page : *first.jsp*
Data From Client : you
A diferença básica entre getAttribute()
e getParameter()
é que o primeiro método extrai um objeto Java (serializado) e o outro fornece um valor String. Nos dois casos, é dado um nome para que seu valor (seja uma string ou um java bean) possa ser consultado e extraído.
É crucial saber que atributos não são parâmetros .
O tipo de retorno para atributos é um Objeto , enquanto o tipo de retorno para um parâmetro é uma String . Ao chamar o getAttribute(String name)
método, lembre-se de que os atributos devem ser convertidos.
Além disso, não há atributos específicos do servlet e não há parâmetros de sessão .
Este post foi escrito com o objetivo de conectar-se à resposta do @ Bozho, como informações adicionais que podem ser úteis para outras pessoas.
A diferença entre getAttribute e getParameter é que getParameter retornará o valor de um parâmetro enviado por um formulário HTML ou incluído em uma sequência de consultas. getAttribute retorna um objeto que você definiu na solicitação, a única maneira de usá-lo é em conjunto com um RequestDispatcher. Você usa um RequestDispatcher para encaminhar uma solicitação para outro recurso (JSP / Servlet). Portanto, antes de encaminhar a solicitação, você pode definir um atributo que estará disponível para o próximo recurso.
- 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")
obterá o valor do formulário publicado da caixa de entrada denominada "testParam", que é "Parâmetro do cliente". Ele será impresso, então você verá "Client Param" na tela. Assim, request.getParameter () recuperará um valor que o cliente enviou. Você receberá o valor no lado do servidor.
- getAttribute ():,
request.getAttribute()
tudo isso é feito no lado do servidor. VOCÊ adiciona o atributo à solicitação e envia a solicitação para outro recurso, o cliente não sabe disso. Portanto, todo o código que manipula isso normalmente estaria em servlets.getAttribute sempre retorna objeto.
getParameter
- É usado para obter as informações necessárias na página HTML do cliente
getAttribute
- É usado para obter os parâmetros configurados anteriormente em outra ou na mesma página JSP ou Servlet.
Basicamente, se você estiver encaminhando ou apenas passando de um jsp / servlet para outro, não há como obter as informações desejadas, a menos que você as coloque em um Objeto e use o atributo set para armazenar em uma variável Session.
Usando getAttribute, você pode recuperar a variável Session.
de http://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribute
Um "parâmetro" é um par de nome / valor enviado do cliente para o servidor - normalmente, de um formulário HTML. Parâmetros podem ter apenas valores String. Às vezes (por exemplo, usando uma solicitação GET), você as codifica diretamente no URL (após o?, Cada um no formato name = value e cada par separado por um &). Outras vezes, eles são incluídos no corpo da solicitação, ao usar métodos como o POST.
Um "atributo" é um mecanismo de armazenamento local do servidor - nada armazenado em atributos com escopo é transmitido para fora do servidor, a menos que você faça isso explicitamente. Os atributos têm nomes de String, mas armazenam valores de Objeto. Observe que os atributos são específicos para Java (eles armazenam objetos Java), enquanto os parâmetros são independentes da plataforma (eles são apenas cadeias formatadas compostas por bytes genéricos).
Existem quatro escopos de atributos no total: "página" (apenas para JSPs e arquivos de tags), "solicitação" (limitada à solicitação do cliente atual, destruída após a conclusão da solicitação), "sessão" (armazenada na sessão do cliente, invalidada após o término da sessão), "aplicativo" (existe para todos os componentes acessarem durante toda a vida útil implementada do seu aplicativo).
A linha inferior é: use parâmetros ao obter dados do cliente, use atributos com escopo ao armazenar objetos no servidor para uso interno somente pelo seu aplicativo.
Outro caso em que você deve usar .getParameter()
é o encaminhamento com parâmetros em jsp:
<jsp:forward page="destination.jsp">
<jsp:param name="userName" value="hamid"/>
</jsp:forward>
Em destination.jsp
, você pode acessar userName
assim:
request.getParameter("userName")
A diferença básica entre getAttribute () e getParameter () é o tipo de retorno.
java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)