Różnica między getAttribute () i getParameter ()

282

Jaka jest różnica między getAttribute()i getParameter()metody w HttpServletRequestklasie?

priya
źródło
1
W jakiej klasie / pakiecie / API? Czy próbowałeś przeczytać JavaDocs dla odpowiednich metod?
Andrew Thompson,
atrybut dotyczy tylko żądania HTTP, które pomaga
serwletom

Odpowiedzi:

328
  • getParameter()zwraca parametry żądania HTTP. Te przekazywane od klienta do serwera. Na przykład http://example.com/servlet?parameter=1. Może tylko wrócićString

  • getAttribute()służy tylko do użytku po stronie serwera - wypełniasz żądanie atrybutami, których możesz użyć w ramach tego samego żądania. Na przykład - ustawiasz atrybut w serwlecie i odczytujesz go z JSP. Może być używany do dowolnego obiektu, nie tylko łańcucha.

Bozho
źródło
3
Przypuszczam, że kiedy używasz czegoś takiego jak ${attrName}na stronie jsp, są to atrybuty, które ustawiasz za pomocą request.getSession().setAttribute()?
ha9u63ar
Ponieważ atrybut żądania jest przechowywany po stronie serwera, czy mogę ustawić atrybut żądania dla żądania międzyserwerowego po przekierowaniu? Chcę wysyłać informacje z jednego serwera na inny serwer w JSF za pośrednictwem atrybutu w żądaniu przekierowania. Od tej chwili mogę wysyłać żądania POST.
user2918640,
W tym przypadku „parametr” wydaje się być synonimem „ciągu zapytania”
BTRUE
getAttribute()jest nie tylko do użytku po stronie serwera: możesz pobrać dane atrybutów na interfejsie - na przykład na stronach jsp i wyświetlić je
parsowanie
49

Zasadniczo parametr jest wartością ciągu, która jest najbardziej znana z tego, że jest wysyłana od klienta do serwera (np. Formularz post) i pobierana z żądania serwletu . Frustrującym wyjątkiem są początkowe parametry ServletContext, które są parametrami łańcuchowymi skonfigurowanymi w pliku web.xml i istnieją na serwerze.

Atrybut to zmienna serwera, która istnieje w określonym zakresie, tj .:

  • application, dostępne przez cały okres użytkowania aplikacji
  • session, dostępne przez cały czas trwania sesji
  • request, dostępne tylko przez okres ważności żądania
  • page (Tylko JSP), dostępne tylko dla bieżącej strony JSP
krock
źródło
„Zasadniczo parametr jest wartością ciągu”. Co innego niż ciągi, co możemy wysłać?
Honey
^ Obiekty jak w przypadku request.setAttribute
Arijit
37

request.getParameter ()

Używamy request.getParameter()do wyodrębnienia parametrów żądania (tj. Danych wysłanych przez opublikowanie formularza HTML). request.getParameter()Zawsze zwraca Stringwartość, a dane pochodzą z klientem.

request.getAttribute ()

Używamy, request.getAttribute()aby obiekt został dodany do zakresu żądania po stronie serwera, tj request.setAttribute(). Za pomocą . Możesz dodać tutaj dowolny typ obiektu Strings, obiekty niestandardowe, w rzeczywistości dowolny obiekt. Dodajesz atrybut do żądania i przekazujesz żądanie do innego zasobu, klient nie wie o tym. Tak więc cały kod obsługujący to zwykle byłby w JSP / serwletach. Możesz użyć, request.setAttribute()aby dodać dodatkowe informacje i przekazać / przekierować bieżące żądanie do innego zasobu.

Rozważmy na przykład first.jsp,

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

i second.jsp:

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

W przeglądarce uruchom first.jsp? CLIENT = ty, a dane wyjściowe w przeglądarce to

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

Podstawowa różnica między getAttribute()i getParameter()polega na tym, że pierwsza metoda wyodrębnia (zserializowany) obiekt Java, a druga zapewnia wartość ciągu. W obu przypadkach podana jest nazwa, aby można było wyszukać i wyodrębnić jej wartość (ciąg znaków lub komponent java bean).

AVI
źródło
4
To był świetny przykład. To powinna być zaakceptowana odpowiedź. Przyjęta odpowiedź jest poprawna, ale dla początkujących przykład wszystko wyjaśnił. Dziękuję Ci.
CapturedTree
26

Ważne jest, aby wiedzieć, że atrybuty nie są parametrami .

Typ zwracany dla atrybutów to Obiekt , natomiast typ zwracany dla parametru to Ciąg . Podczas wywoływania getAttribute(String name)metody należy pamiętać, że atrybuty muszą być rzutowane.

Ponadto nie ma atrybutów specyficznych dla serwletu ani parametrów sesji .

Ten post został napisany w celu połączenia się z odpowiedzią @ Bozho, jako dodatkowej informacji, która może być przydatna dla innych osób.

oneiros
źródło
9

Różnica między getAttribute a getParameter polega na tym, że getParameter zwróci wartość parametru przesłanego przez formularz HTML lub uwzględnionego w ciągu zapytania. getAttribute zwraca obiekt, który ustawiłeś w żądaniu, jedynym sposobem na użycie tego jest połączenie z RequestDispatcher. Za pomocą narzędzia RequestDispatcher można przesłać żądanie do innego zasobu (JSP / Servlet). Dlatego przed przekazaniem żądania możesz ustawić atrybut, który będzie dostępny dla następnego zasobu.

Abhi
źródło
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")otrzyma wartość z opublikowanego formularza pola wejściowego o nazwie „testParam”, który jest „parametr klienta”. Następnie wydrukuje to, więc powinieneś zobaczyć „Client Param” na ekranie. Więc request.getParameter () pobierze wartość przesłaną przez klienta. Otrzymasz wartość po stronie serwera.

- getAttribute (): request.getAttribute() wszystko odbywa się po stronie serwera. TY dodajesz atrybut do żądania i przesyłasz żądanie do innego zasobu, klient nie wie o tym. Tak więc cały kod obsługujący to zwykle znajduje się w servlets.getAttribute zawsze zwraca obiekt.

Reetika
źródło
4

getParameter - Służy do uzyskiwania potrzebnych informacji ze strony HTML klienta

getAttribute - Służy do uzyskania parametrów ustawionych wcześniej na innej lub tej samej stronie JSP lub Servlet.

Zasadniczo, jeśli przesyłasz lub po prostu przechodzisz z jednego serwera JSP / serwletu na inny, nie ma sposobu, aby uzyskać potrzebne informacje, chyba że zdecydujesz się umieścić je w obiekcie i użyć atrybutu set do przechowywania w zmiennej Session.

Korzystając z getAttribute, możesz pobrać zmienną Session.

PaulStevens
źródło
3

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

„Parametr” to para nazwa / wartość wysyłana od klienta do serwera - zazwyczaj z formularza HTML. Parametry mogą mieć tylko wartości ciągu. Czasami (np. Za pomocą żądania GET) zobaczysz, że są one zakodowane bezpośrednio w adresie URL (po znaku?, Każdy w formie nazwa = wartość i każda para oddzielona znakiem &). W innych przypadkach są one uwzględniane w treści żądania, przy użyciu metod takich jak POST.

„Atrybut” to lokalny serwerowy mechanizm pamięci - nic przechowywane w atrybutach o zasięgu nie jest nigdy przesyłane poza serwerem, chyba że wyraźnie to zrobisz. Atrybuty mają nazwy String, ale przechowują wartości Object. Zauważ, że atrybuty są specyficzne dla Javy (przechowują obiekty Java), podczas gdy parametry są niezależne od platformy (są to tylko sformatowane ciągi złożone z ogólnych bajtów).

Istnieją w sumie cztery zakresy atrybutów: „strona” (tylko pliki JSP i pliki znaczników), „żądanie” (ograniczone do żądania bieżącego klienta, zniszczone po zakończeniu żądania), „sesja” (przechowywane w sesji klienta, unieważnione po zakończeniu sesji), „aplikacja” (istnieje dla wszystkich komponentów, aby uzyskać dostęp przez cały czas wdrażania aplikacji).

Najważniejsze jest: użyj parametrów przy uzyskiwaniu danych od klienta, użyj atrybutów o zasięgu podczas przechowywania obiektów na serwerze do użytku wewnętrznego tylko przez aplikację.

Bhavin Shah
źródło
3

Innym przypadkiem, w którym powinieneś użyć .getParameter()jest przekazywanie z parametrami w jsp:

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

W destination.jspmożesz uzyskać dostęp w userNamenastępujący sposób:

request.getParameter("userName")
Hamid Mohayeji
źródło
-6

Podstawową różnicą między getAttribute () i getParameter () jest typ zwracany.

java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)
Chirag Visavadiya
źródło
2
nie jesteście do tego szczerzy.
Bogdan M.,