Різниця між getAttribute () та getParameter ()


282

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


1
У якому класі / пакеті / API? Ви спробували прочитати JavaDocs для відповідних методів?
Ендрю Томпсон


атрибут призначений лише для запиту http, який допомагає
сервлетам

Відповіді:


328
  • getParameter()повертає параметри запиту http. Ті перейшли від клієнта до сервера. Наприклад http://example.com/servlet?parameter=1. Повернутися можна лишеString

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


3
Я думаю, коли ви використовуєте щось на зразок ${attrName}сторінки jsp, це атрибути, які ви встановили request.getSession().setAttribute()?
ha9u63ar

Оскільки атрибут запиту зберігається на стороні сервера, чи можу я встановити атрибут запиту для міжсерверного запиту після перенаправлення-отримання? Я хочу надсилати інформацію з одного сервера на інший сервер у JSF через атрибут у запиті на переадресацію. Я можу надсилати через POST запит відтепер.
користувач2918640

У цьому випадку "Параметр" здається синонімом "рядок запиту"
BTRUE

getAttribute()не тільки для серверного використання: ви можете отримати дані атрибутів на передній панелі - наприклад, на jsp-сторінках, і відобразити їх
розбір

49

Як правило, параметр - це рядкове значення, яке найбільш відоме за тим, що надсилається від клієнта на сервер (наприклад, форма форми) та отримується з запиту сервлета . Розчаровуючим винятком цього є початкові параметри ServletContext, які є рядковими параметрами, які налаштовані в web.xml та існують на сервері.

Атрибут - це змінна зміна сервера, яка існує у визначеному обсязі, тобто:

  • application, доступний протягом життя всієї програми
  • session, доступний протягом життя сесії
  • request, доступний лише протягом терміну дії запиту
  • page (Лише JSP), доступний лише для поточної сторінки JSP

"Як правило, параметр - це значення рядка" Крім рядків, що ми могли б надсилати?
Мед

^ Об'єкти, як і у випадку запиту.setAttribute
Arijit

37

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 = ви та вихід у вашому браузері

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

Основна відмінність між getAttribute()і getParameter()полягає в тому, що перший метод витягує (серіалізований) об’єкт Java, а другий надає значення String. В обох випадках ім'я дається таким чином, щоб його значення (будь то струна або квасоля Java) можна було шукати та витягувати.


4
Це був чудовий приклад. Це має бути прийнятою відповіддю. Прийнята відповідь правильна, але для нових бажаючих приклад уточнив усе. Дякую.
Захоплене

26

Важливо знати, що атрибути не є параметрами .

Тип повернення для атрибутів - Object , тоді як тип повернення для параметра - String . Викликаючи getAttribute(String name)метод, майте на увазі, що атрибути повинні бути передані.

Крім того, немає специфічних атрибутів сервлету , а також немає параметрів сеансу .

Цей пост написаний з метою підключення до відповіді @ Божо, як додаткової інформації, яка може бути корисною для інших людей.


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", яке є "Параметр клієнта". Потім він буде роздруковувати його, тому на екрані ви побачите "Параметр клієнта". Тому request.getParameter () отримає значення, яке подав клієнт. Ви отримаєте значення на стороні сервера.

- getAttribute ():, request.getAttribute() це все зроблено на стороні сервера. ВИ додаєте атрибут до запиту, і ви подаєте запит на інший ресурс, клієнт про це не знає. Таким чином, весь код обробки цього, як правило, знаходиться в servlets.getAttribute завжди повертається об'єктом.


4

getParameter - Використовується для отримання потрібної інформації зі сторінки HTML Клієнта

getAttribute - Це використовується для отримання параметрів, встановлених раніше на іншій або тій же сторінці JSP або Servlet.

В основному, якщо ви пересилаєте або просто переходите з одного jsp / servlet на інший, немає жодної можливості мати потрібну інформацію, якщо ви не вирішите помістити їх у Object і не використовувати атрибут set для зберігання в змінній Session.

Використовуючи getAttribute, ви можете отримати змінну Session.


3

від http://www.coderanch.com/t/361868/Servlets/java/request-getParameter-request-getAttribute

"Параметр" - пара імен / значень, що надсилаються від клієнта на сервер - як правило, з форми HTML. Параметри можуть мати лише рядкові значення. Іноді (наприклад, використовуючи GET-запит) ви побачите їх, закодовані безпосередньо в URL-адресу (після?, Кожен у формі name = значення та кожну пару, розділену знаком &). В іншому випадку вони включаються в тіло запиту під час використання таких методів, як POST.

"Атрибут" - це локальний механізм зберігання сервера - нічого, що зберігається в масштабних атрибутах, ніколи не передається за межі сервера, якщо ви прямо не зробите це. Атрибути мають назви рядків, але зберігають значення Object. Зауважте, що атрибути специфічні для 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
ви не з цим ставитесь.
Богдан М.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.