На начальном этапе изучения JavaWeb каждый встретит методы doGet и doPost в HttpServlet. Два дня назад я прочитал «Head First Servlets & JSP» и увидел, что там говорится о разнице между запросами на получение и запросами на публикацию в сервлетах. Я резюмирую это следующим образом:
1: Размер запрошенных данных отличается.
Поскольку данные, запрошенные методом get, добавляются к URL-адресу, а размер данных URL-адреса обычно не может превышать 2 КБ, существует ограничение на размер данных при использовании метода запроса get. Метод почтового запроса помещает данные в тело сообщения, поэтому теоретически ограничений на объем данных нет. (Но в реальной эксплуатации оно не может быть слишком большим)
2: Безопасность другая
Поскольку данные, запрошенные методом get, добавляются к URL-адресу, внешние пользователи могут легко их увидеть. С этой точки зрения это небезопасно. Метод post помещает запрос в тело сообщения и не будет отображаться непосредственно в URL-адресе, поэтому с этой точки зрения данные будут в большей безопасности.
3: Создание закладки
Запросы на получение могут создавать закладки, запросы на публикацию — нет. Например: предположим, что у вас есть страница, которая позволяет пользователям указывать правила поиска. Пользователь может вернуться через неделю и захотеть получить исходные данные, но в это время на сервере есть новые данные.
4: Использование методов
get используется для получения чего-либо, простого получения без внесения каких-либо изменений на сервер. Публикация означает, что пользователь отправляет данные на обработку и может изменять данные на сервере.
5: Является ли запрос идемпотентным?
Запрос на получение идемпотентен, он просто получает что-то и не изменяет содержимое на сервере. Его можно выполнять несколько раз без каких-либо плохих побочных эффектов. Сообщение не является идемпотентным, и представленные данные в теле сообщения могут использоваться для необратимых транзакций. Поэтому с этой точки зрения вам следует использовать функцию doPost() с осторожностью.
Если в форме не указан метод="POST", по умолчанию будет использоваться HTTP-запрос GET. То есть состоянием по умолчанию является вызов запроса на получение.
На начальном этапе изучения JavaWeb каждый встретит методы doGet и doPost в HttpServlet.
(1) метод doGet: в основном обрабатывает запросы Get в Http (2) метод doPost: в основном обрабатывает запросы Post в Http
Так в чем же разница между запросом Get и запросом Post?
(1) get имеет только один поток. Параметры добавляются к URL-адресу. Количество параметров строго ограничено и может быть только строкой. Например, http://localhost:8888/javaweb/getServlet?name=123.
(2) Параметры сообщения передаются через другой поток, а не через URL-адрес, поэтому он может быть очень большим, а также могут передаваться двоичные данные, например загрузка файла.
Когда использовать методы doGet и doPost:
1. Для сервлета, отправленного через форму, проверьте, является ли метод формы get или post.
2. доступ к сервлету осуществляется по ссылке <a href...>, doGet
3. Введите адрес сервлета непосредственно в адресную строку IE, doGet.