Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> service vs doGet-doPost 
V
    Опции темы
check
Дата 6.1.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Такой скорее теоретический вопрос относительно сервлетов...
Есть ли какой-то практический смысл в использовании методов doGet и doPost
вместо единого метода service для обработки и GET и POST запросов?
Или это просто дело вкуса?
Эккель в своей книге пишет: "я никогда не видел объяснения, которое заставило 
бы меня поверить, что это не просто интертность мышления CGI программистов, 
которые привыкли обращать внимание, используется ли GET или POST".
PM MAIL   Вверх
Greg
Дата 6.1.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: 5
Всего: 7



Чесно говоря,трудно представить себе логику приложения,которая бы зависела от метода передачи параметров в HTTP запросе.
Я,например,не встречался с такого рода задачами,где разделение логики работы на POST и GET оправдывало бы себя.

--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
check
Дата 6.1.2007, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



В общем,  да, здравый смысл подсказывает что такое разделение реально не нужно.
Просто хотел в этом удостовериться.  
Тот же Эккель пишет: "Однако держите в уме, что я что-то упустил, что, возможно, является хорошей причиной в пользу использования doGet( ) и doPost( )".

Так что если кто-то вдруг знает какой-то секрет, неведомый Брюсу Эккелю - поделитесь  smile  
PM MAIL   Вверх
Maksym
Дата 6.1.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



check
Иногда необходимо, чтобы параметры запроса передвались в браузерной строке и были видны пользователю. Хороший пример -- Яндекс: скопировал браузерную строку и можешь вызывать запрос в сдед раз одним кликом, или отправить другу...
PM MAIL   Вверх
check
Дата 6.1.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Maksym,  речь не об том.  Я не собирался тут обсуждать целесообразность существования
методов POST и GET smile  Попробуйте-ка передать параметр через  ссылку методом POST  smile (конечно можно с помощью AJAX, но не будем об извращениях).

Но в сервлете метод service совершенно одинаковым образом обрабатывает GET и POST запросы,
однако в литературе в основном рекомендуют создавать для получения гетов и постов отдельные методы doGet и doPost.  Вот я и хотел узнать - это просто дань традиции, или это действительно для чего-то нужно. 
PM MAIL   Вверх
Maksym
Дата 6.1.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



check
Сори, я понял smile Всегда использовал service. Но думаю, для более глубокого понимания имеет смысл глянуть какой метод используют разработчики mvc фремворков (в сервлетах struts или в jsf реализациях).
PM MAIL   Вверх
Greg
Дата 6.1.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 16.9.2006
Где: Беларусь, г.Минск

Репутация: 5
Всего: 7



Вот пример из кода ActionServlet в Struts 1.2.4:
Код

...
/**
     * <p>Process an HTTP "GET" request.</p>
     *
     * @param request The servlet request we are processing
     * @param response The servlet response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception occurs
     */
    public void doGet(HttpServletRequest request,
              HttpServletResponse response)
        throws IOException, ServletException {

        process(request, response);

    }


    /**
     * <p>Process an HTTP "POST" request.</p>
     *
     * @param request The servlet request we are processing
     * @param response The servlet response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception occurs
     */
    public void doPost(HttpServletRequest request,
               HttpServletResponse response)
        throws IOException, ServletException {

        process(request, response);

    }

    /**
     * <p>Perform the standard request processing for this request, and create
     * the corresponding response.</p>
     *
     * @param request The servlet request we are processing
     * @param response The servlet response we are creating
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet exception is thrown
     */
    protected void process(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {

        ModuleUtils.getInstance().selectModule(request, getServletContext());
        ModuleConfig config = getModuleConfig(request);

        RequestProcessor processor = getProcessorForModule(config);
        if (processor == null) {
           processor = getRequestProcessor(config);
        }
        processor.process(request, response);

    }
...


Вот кстати,что про это пишет человек на jguru.com.
Оффтоп:
Когда я впервые начал изучать Java,я понял,что это не просто новый язык,а новый мир со своими правилами и особенностями.Стилю написания программ,как оказалось в этом мире,отводилась далеко не самая последняя роль.И это всё благодаря очень логичному языку Java,в котором кажется всё расставлено на свои места и нет ничего лишнего.
Даже если логика приложения не зависит от метода передачи данных,всё равно переопределять метод service считается дурным тоном,хоть это и уменьшает размер кода.Например потому,что в где-нибудь в далёком кошмарном будущем эта зависимость может появиться.
--------------------
Страх перед возможностью ошибки не должен отвращать нас от поисков истины.
PM MAIL   Вверх
check
Дата 6.1.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Greg,  убедил. Меняю во всех своих сервлетах service на doGet и doPost.
Благо, сервлетов пока не так много.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.