Jaka jest różnica między getAttribute()
i getParameter()
metody w HttpServletRequest
klasie?
Jaka jest różnica między getAttribute()
i getParameter()
metody w HttpServletRequest
klasie?
Odpowiedzi:
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.
${attrName}
na stronie jsp, są to atrybuty, które ustawiasz za pomocą request.getSession().setAttribute()
?
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
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 aplikacjisession
, dostępne przez cały czas trwania sesjirequest
, dostępne tylko przez okres ważności żądaniapage
(Tylko JSP), dostępne tylko dla bieżącej strony JSP request.getParameter ()
Używamy request.getParameter()
do wyodrębnienia parametrów żądania (tj. Danych wysłanych przez opublikowanie formularza HTML). request.getParameter()
Zawsze zwraca String
wartość, 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).
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.
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.
- 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.
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.
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ę.
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.jsp
możesz uzyskać dostęp w userName
następujący sposób:
request.getParameter("userName")
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)