Diferença entre getAttribute () e getParameter ()

282

Qual é a diferença entre getAttribute()e getParameter()métodos dentro da HttpServletRequestclasse?

priya
fonte
1
Em que classe / pacote / API? Você tentou ler os JavaDocs para os métodos relevantes?
9788 Andrew Thompson #
atributo é apenas para http pedido que ajuda servlets trabalhar juntos
bitfishxyz

Respostas:

328
  • 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.

Bozho
fonte
3
Suponho que quando você usa algo como ${attrName}em uma página jsp, esses são os atributos que você define usando request.getSession().setAttribute()?
precisa saber é o seguinte
Como o atributo request está armazenado no lado do servidor, posso definir o atributo request para um pedido pós-redirecionamento-obtenção entre servidores? Desejo enviar informações de um servidor para outro no JSF por meio de um atributo na solicitação de redirecionamento. Posso enviar via solicitação POST a partir de agora.
user2918640
Nesse caso, "Parameter" parece ser sinônimo de "query string"
BTRUE 30/01
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
parsecer
49

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 aplicativo
  • session, disponível durante toda a vida da sessão
  • request, disponível apenas para a vida útil da solicitação
  • page (Apenas JSP), disponível apenas para a página JSP atual
Krock
fonte
"Geralmente, um parâmetro é um valor de string" Além de strings, o que poderíamos estar enviando?
Mel
^ Objetos como no caso de request.setAttribute #
287
37

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 Stringe 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, Stringsobjetos 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.

AVI
fonte
4
Este foi um ótimo exemplo. Essa deve ser a resposta aceita. A resposta aceita está correta, mas para os novatos um exemplo esclareceu tudo. Obrigado.
CapturedTree
26

É 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.

oneiros
fonte
9

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.

Abhi
fonte
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")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.

Reetika
fonte
4

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.

PaulStevens
fonte
3

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.

Bhavin Shah
fonte
3

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 userNameassim:

request.getParameter("userName")
Hamid Mohayeji
fonte
-6

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)
Chirag Visavadiya
fonte
2
você não é rígido sobre isso.
Bogdan M.