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


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.


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

„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).


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.


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.


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.


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.


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


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")

-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)

2
nie jesteście do tego szczerzy.
Bogdan M.,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.