Разница между getAttribute () и getParameter ()

283

В чем разница между getAttribute()и getParameter()методы внутри HttpServletRequestкласса?

прийа
источник
1
В каком классе / пакете / API? Вы пробовали читать JavaDocs для соответствующих методов?
Эндрю Томпсон
атрибут только для http-запроса, который помогает сервлетам работать вместе
bitfishxyz

Ответы:

329
  • getParameter()возвращает параметры http-запроса. Те, которые передаются от клиента к серверу. Например http://example.com/servlet?parameter=1. Могу только вернутьString

  • getAttribute()только для использования на стороне сервера - вы заполняете запрос атрибутами, которые вы можете использовать в том же запросе. Например - вы устанавливаете атрибут в сервлете и читаете его из JSP. Может использоваться для любого объекта, а не только для строки.

Bozho
источник
3
Я полагаю, когда вы используете что-то вроде ${attrName}на странице JSP, эти атрибуты вы устанавливаете request.getSession().setAttribute()?
ha9u63ar
Поскольку атрибут запроса хранится на стороне сервера, могу ли я установить атрибут запроса для межсерверного запроса post-redirect-get? Я хочу отправить информацию с одного сервера на другой сервер в JSF через атрибут в запросе перенаправления. Я могу отправить через POST запрос на данный момент.
user2918640
В этом случае «Параметр» кажется синонимом «строки запроса»
BTRUE
getAttribute()не только для использования на стороне сервера: вы можете получить данные атрибута на
внешнем интерфейсе
49

Обычно параметр - это строковое значение, которое чаще всего известно как отправка от клиента на сервер (например, публикация формы) и извлечение из запроса сервлета . Разочаровывающим исключением из этого являются начальные параметры ServletContext, которые являются строковыми параметрами, которые настроены в web.xml и существуют на сервере.

Атрибут - это серверная переменная, которая существует в указанной области, т.е.

  • application, доступный для жизни всего приложения
  • session, доступный для жизни сессии
  • request, доступно только для жизни запроса
  • page (Только JSP), доступно только для текущей страницы JSP
Крок
источник
«Как правило, параметр является строковым значением» Кроме строк, что мы могли бы посылать?
Мед
^ Объекты как в случае request.setAttribute
Arijit
38

request.getParameter ()

Мы используем request.getParameter()для извлечения параметров запроса (например, данные, отправленные путем размещения формы HTML). request.getParameter()Всегда возвращает Stringзначение и данные от клиента.

request.getAttribute ()

Мы используем , request.getAttribute()чтобы получить объект добавлен в контексте запроса на стороне сервера , то есть используя request.setAttribute(). Вы можете добавить любой тип объекта, который вам здесь нравится Strings, Пользовательские объекты, фактически любой объект. Вы добавляете атрибут к запросу и перенаправляете запрос на другой ресурс, клиент не знает об этом. Таким образом, весь код, обрабатывающий это, обычно находится в JSP / сервлетах. Вы можете использовать request.setAttribute()для добавления дополнительной информации и переадресации / перенаправления текущего запроса на другой ресурс.

Например, рассмотрим около first.jsp,

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

и second.jsp:

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

В вашем браузере запустите first.jsp? CLIENT = you, и вывод в вашем браузере

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

Основное различие между getAttribute()и getParameter()заключается в том, что первый метод извлекает (сериализованный) объект Java, а другой предоставляет значение String. В обоих случаях имя дается так, чтобы его значение (будь то строка или Java-бин) можно было искать и извлекать.

AVI
источник
4
Это был отличный пример. Это должен быть принятый ответ. Принятый ответ правильный, но для новичков пример прояснил все. Спасибо.
CapturedTree
26

Важно знать, что атрибуты не являются параметрами .

Тип возвращаемого значения для атрибутов - Объект , тогда как тип возвращаемого значения для параметра - Строка . При вызове getAttribute(String name)метода имейте в виду, что атрибуты должны быть приведены.

Кроме того, отсутствуют специфичные для сервлета атрибуты и отсутствуют параметры сеанса .

Этот пост написан с целью подключения к ответу @ Bozho, как дополнительная информация, которая может быть полезна для других людей.

Oneiros
источник
9

Разница между getAttribute и getParameter заключается в том, что getParameter будет возвращать значение параметра, который был отправлен в форме HTML или был включен в строку запроса. getAttribute возвращает объект, который вы установили в запросе, единственный способ использовать его в сочетании с RequestDispatcher. Вы используете RequestDispatcher для пересылки запроса другому ресурсу (JSP / Servlet). Поэтому, прежде чем переслать запрос, вы можете установить атрибут, который будет доступен для следующего ресурса.

Аби
источник
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")получит значение из размещенной формы поля ввода с именем «testParam», которое является «Client param». Затем он распечатает его, поэтому вы должны увидеть «Client Param» на экране. Поэтому request.getParameter () будет получать значение, которое отправил клиент. Вы получите значение на стороне сервера.

- getAttribute (): request.getAttribute() все это делается на стороне сервера. ВЫ добавляете атрибут к запросу и ВЫ отправляете запрос на другой ресурс, клиент не знает об этом. Таким образом, весь код, обрабатывающий это, обычно будет в servlets.getAttribute всегда возвращать объект.

Reetika
источник
4

getParameter - Используется для получения необходимой информации со страницы HTML Клиента.

getAttribute - Это используется для получения параметров, установленных ранее на другой или той же странице JSP или сервлета.

По сути, если вы пересылаете или просто переходите от одного jsp / servlet к другому, нет способа получить нужную информацию, если вы не решите поместить ее в Object и использовать атрибут set для хранения в переменной Session.

Используя getAttribute, вы можете получить переменную Session.

PaulStevens
источник
3

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

«Параметр» - это пара имя / значение, отправляемая клиентом на сервер - обычно из формы HTML. Параметры могут иметь только строковые значения. Иногда (например, с помощью GET-запроса) вы увидите, что они закодированы непосредственно в URL (после?, Каждый в форме name = value, и каждая пара разделена символом &). В других случаях они включаются в тело запроса при использовании таких методов, как POST.

«Атрибут» - это механизм локального хранения сервера - ничего, хранящегося в атрибутах с областью действия, никогда не передается за пределы сервера, если вы явно не сделаете этого. Атрибуты имеют строковые имена, но хранят значения объектов. Обратите внимание, что атрибуты специфичны для Java (они хранят объекты Java), в то время как параметры не зависят от платформы (они представляют собой только отформатированные строки, составленные из общих байтов).

Всего имеется четыре области действия атрибутов: «страница» (только для JSP и файлов тегов), «запрос» (ограничен текущим запросом клиента, уничтожен после завершения запроса), «сеанс» (сохранен в сеансе клиента, аннулирован после завершения сеанса) «приложение» (существует для доступа всех компонентов в течение всего развернутого времени жизни вашего приложения).

Суть в следующем: используйте параметры при получении данных от клиента, используйте атрибуты области при хранении объектов на сервере для внутреннего использования только вашим приложением.

Бхавин шах
источник
3

Другой случай, когда вы должны использовать .getParameter()это при пересылке с параметрами в JSP:

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

В destination.jsp, вы можете получить доступ к userNameэтому:

request.getParameter("userName")
Хамид Мохаеджи
источник
-6

Основное различие между getAttribute () и getParameter () заключается в типе возвращаемого значения.

java.lang.Object getAttribute(java.lang.String name)
java.lang.String getParameter(java.lang.String name)
Чираг Висавадия
источник
2
Вы не правы об этом.
Богдан М.