Вопрос-ответ

Difference between getAttribute() and getParameter()

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

В чем различия между getAttribute() и getParameter() методами в HttpServletRequest?

Переведено автоматически
Ответ 1

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



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



Ответ 2

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

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


  • application доступно на протяжении всего срока службы всего приложения

  • session доступно в течение всего срока действия сеанса

  • request доступно только на время выполнения запроса

  • page (только JSP), доступно только для текущей страницы JSP

Ответ 3

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

В вашем браузере сначала запустите.jsp?CLIENT= you и результат в вашем браузере будет следующим

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

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

Ответ 4

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

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

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

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

2023-05-15 13:15 java servlets