|
Зачем нам Get-запрос при удалении сущности? | ☑ | ||
---|---|---|---|---|
0
Steel_Wheel
31.08.12
✎
13:19
|
Собственно, вопрос.
Делаю простой блог-хост. Есть список комментов, захотел прикрутить кнопку/гиперссылку удаления прямо в их списке. Приписал пост-метод на их удаление, а при переходе по ней, приложение выдает, что не найден GET-метод Внимание, вопрос: зачем там get-метод, если все данные уже отображены в списке, а я пытаюсь заставить сервер сделать действие (это уже метод POST)? |
|||
1
Волшебник
31.08.12
✎
13:22
|
GET - это через URL
POST - через форму, submit |
|||
2
Steel_Wheel
31.08.12
✎
13:24
|
(1) Т.е. сделать кнопку -- правильнее (это как раз и есть submit-тег)
|
|||
3
Steel_Wheel
31.08.12
✎
13:26
|
Так, submit не тег. тег -- button.
Думаю, его и задействую, метод передачи сделаю POST |
|||
4
skunk
31.08.12
✎
13:29
|
гет запрос оптправляет данные путем формирования урл ... то есть ... Зачем нам Get-запрос при удалении сущности? это типичный гет запрос ... в котором передаються два параметра ид - темы и алл - показывать все сообщения
урла была-бы http://www.forum.mista.ru/topic.php ... а параметры передались бы в самом хттп пакете ... пост используют как правило для пердачи больших данных |
|||
5
skunk
31.08.12
✎
13:30
|
в посте урла была-бы http://www.forum.mista.ru/topic.php ... а параметры передались бы в самом хттп пакете ...
|
|||
6
Steel_Wheel
31.08.12
✎
13:33
|
Ну у меня URL
simpleblog/details/22/deleteComment/15 simpleblog/details/ -- это контроллер темы (который принимает id темы) deleteComment/15 -- это метод контроллера, который говорит, что надо удалить comment с id=15 как-то так. Проект дома, я на работе |
|||
7
skunk
31.08.12
✎
13:34
|
у тебя судя по всему типичный гет
|
|||
8
Steel_Wheel
31.08.12
✎
15:03
|
А я могу гет-ом удалять из БД?
Код как бы есть, но может, ограничения какие-то есть? |
|||
9
BigHarry
31.08.12
✎
20:22
|
(8) А какая разница, гетом или постом удалять? В обоих методах можно параметрами передать все необходимые данные для удаления из БД, подозреваю что это будет какой-то ID ключевой записи, для этого GET-а хватит....
|
|||
10
Asmody
31.08.12
✎
21:28
|
ну, вообще-то в спецификации протокола метод DELETE описан www.w3.org/Protocols/rfc2616/rfc2616-sec9, только в браузерах он не реализован.
Де-факто GET и POST различаются только способом передачи параметров |
|||
11
Steel_Wheel
31.08.12
✎
22:49
|
(10) строка адреса / где-то в запросе?
|
|||
12
BigHarry
01.09.12
✎
09:48
|
Собственно, через GET можно информацию не только в строке запроса передать, но еще и в заголовке, через всякие там куки-шмуки и прочие служебные поля, но для передачи больших объемов информации на сервер задуман был как раз POST.
|
|||
13
Torquader
01.09.12
✎
22:12
|
Начнём с того, что браузер изначально умеет только два метода - GET или POST, которые пишутся в теге формы.
Соответственно, для удаления чего-либо нужно использовать метод POST, так как система кеширования считает POST-запросы значимыми и выдаёт предупреждение пользователю, если он пытается повторить POST запрос, а вместо GET запроса "умный" браузер вообще может передать вопрос об изменении страницы, если запрос с указанными параметрами уже был (не забываем, что в случае GET все параметры пишутся в адресной строке, то есть строке запроса). Во-вторых, удаление из базы и запрос к Web-серверу никак не связаны, так как это разные действия над совершенно разными объектами - и нужно написать код, который при определённом POST-запросе будет вызывать команду удаления строки из базы данных сервера. |
|||
14
BigHarry
02.09.12
✎
11:34
|
(13) Все это легко обрабатывается на сервере, нормальный браузер не будет кэшировать, если сервер ему в заголовке ответа выдаст соответствующие инструкции.
|
|||
15
oleg_km
02.09.12
✎
19:26
|
(14) ну на POST браузер по-любому выдаст предупреждение при нажатии кнопки обновления. Вообще-то в RFC расписаны все рекомендации по особенностям GET и POST
|
|||
16
Steel_Wheel
05.09.12
✎
12:05
|
(13) Такой код есть.
@Controller @RequestMapping(value = "/topic") public class TopicController { @Autowired private TopicService service; ... @RequestMapping(value = "/deleteComment/{commentId}", method = {RequestMethod.POST, RequestMethod.POST}) public String deleteComment(@PathVariable int commentId, BindingResult result, Model model){ Comment deletedComment = commentService.findCommentByID(commentId); if (deletedComment != null) { commentService.deleteComment(deletedComment); } return "refresh:"; } } Два метода доступа гет/пост были добавлены из за следующего: Я нарисовал кнопку <form><button formaction = "../deleteComment/1" formmethod = "post">delete</button></form> Потом нажал на нее, управление в метод контроллера не передалось. Тогда я переделал кнопку: <form action="../deleteComment/1" method="post"> <button>delete</button> </form> И снова нажал. Управление опять не передалось. Тогда я добавил еще 2 такие же кнопки, но с методом GET. Опять не передается управление. Прикрутил гиперссылку, перешел по ней -- управление передано успешно. Что бы я мог делать не так? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |