powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем принципиально важное значение service() метода сервлета помимо известного?
9 сообщений из 9, страница 1 из 1
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078487
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
известно, что:
1. service вызывается контейнером при каждом запросе веб-серверу, ему передается request/response
2. service вызывает метод, соответсвующий типу запроса(doGet, doPost и т.д.)

Остается непонятным:
1. Как определяется тип запроса? По каким-нибудь свойствам, инкапсулированным в объекте request-а?
2. Перед тем как перенаправить на соответсвующий doGet, doPost и т.д. - метод что-нибудь делает(иницирует)? Всмысле может инициализация чего-нибудь связанного с контекстом данного веб-приложения или в этом роде?
3. Какие последствия могут возникнуть, если всю логику обработки запроса писать в переопределенном service?
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078548
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ddockerКак определяется тип запроса? По каким-нибудь свойствам, инкапсулированным в объекте request-а?

- с помощью условного перехода и метода getMethod() интерфейса HttpServletRequest

ddockerПеред тем как перенаправить на соответсвующий doGet, doPost и т.д. - метод что-нибудь делает(иницирует)? Всмысле может инициализация чего-нибудь связанного с контекстом данного веб-приложения или в этом роде?

- насколько помню, ничего такого он не делает

ddocker
Какие последствия могут возникнуть, если всю логику обработки запроса писать в переопределенном service?
- перестанут автоматически вызываться методы doGet, doPost и т. д. :)
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078618
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ясно.
в таком случае, совсем необязательно в переопределенном service() вызывать super.service() [если у нас конечно нет переопределенных doPost/doGet...], как в случае с методом init()
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078656
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел таки еще одну важную функцию service()!
Вернее на другом форуме статейку подкинули (http://www.informit.com/articles/article.asp?p=29817&seqNum=3&rl=1):
...Second, you can add support for modification dates by adding a getLastModified method. Since getLastModified is invoked by the default service method, overriding service eliminates this option. Finally, you get automatic support for HEAD, OPTION, and TRACE requests....

Т.е. если мы не вызываем super.service() в нашем переопределенном service() - то не сможем указать нужный LastModified в заголовке ответа!
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078673
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ddockerТ.е. если мы не вызываем super.service() в нашем переопределенном service() - то не сможем указать нужный LastModified в заголовке ответа!
- Вы ошибаетесь, переопределение service никак не влияет на отправку заголовков HTTP. Любые заголовки можно гарантировано отправлять до вызова метода getWriter() или getOutputStream(), в том числе и Last-Modified. При использовании буферизации это можно сделать и после вызова соответветствующих методов, но в данном случае это не актуально.
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078677
ddocker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- Вы ошибаетесь, переопределение service никак не влияет на отправку заголовков HTTP.
Как же так..?
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 public   class  go1  extends  HttpServlet {
    @Override
     protected   long  getLastModified(HttpServletRequest req) {
         return  System.currentTimeMillis() -  1000  *  10 ;
    }

    @Override
     protected   void  doGet(HttpServletRequest req, HttpServletResponse resp)
             throws  ServletException, IOException {

    }

    @Override
     protected   void  service(HttpServletRequest req, HttpServletResponse resp)
             throws  ServletException, IOException {
         super .service(req, resp);
    }
}
Запускаем, смотрим - lastmodified посылается. Теперь комментируем super.init(), деплой-запуск - не посылается. (tomcat 5.5.17)
При этом если getLastModified - вообще не переопределен, то он в любом случае не посылается (ну если его вручную через response не устанавливать, о чем ниже)

Kachalov
Любые заголовки можно гарантировано отправлять до вызова метода getWriter() или getOutputStream(), в том числе и Last-Modified. При использовании буферизации это можно сделать и после вызова соответветствующих методов, но в данном случае это не актуально.

Да, конечно, как это я про HttpResponse.setHeader забыл...

Видимо этот описанный механизм c вызовом getLastModified относится к что-то вроде механизму по-умалчанию....
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34078680
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ddockertomcat 5.5.17
- а в других контейнерах? Спецификация ничего не говорит об автоматической отправке Last-Modified, так что респект разработчикам Tomcat :)
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34079807
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov ddockertomcat 5.5.17
- а в других контейнерах? Спецификация ничего не говорит об автоматической отправке Last-Modified, так что респект разработчикам Tomcat :)
А разве Tomcat не является эталоном реализации WEB-технологий от Sun (Servlet)? Есть же такое понятие, что все что идет на Tomcat идет и на других веб-серверах. Или это только в теории?
...
Рейтинг: 0 / 0
В чем принципиально важное значение service() метода сервлета помимо известного?
    #34081769
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvА разве Tomcat не является эталоном реализации WEB-технологий от Sun (Servlet)? Есть же такое понятие, что все что идет на Tomcat идет и на других веб-серверах. Или это только в теории?
- Tomcat создается группой независимых разработчиков не имеющих никакого отношения к компании Sun и содержит ряд механизмов и библиотек не описаных в спецификации сервлетов и JSP. Собственно компания Sun разрабатывает спецификацию в виде Servlet/JSP API (в основном в виде интерфейсов), а реализация этой спецификации ложится на плечи разработчиков контейнера сервлетов. Так же Sun специфицирует структуру папок web-приложения и синтаксис конфигурационного файла web.xml.

- в отношении сервлетов, как правило, действительно "все что идет на Tomcat идет и на других веб-серверах", хотя и здесь есть подводные камни: вот всплыл вопрос заголовков HTTP, есть еще вопрос размера буфера вывода по умолчанию, есть вопрос авторизации с помощью форм (такой способ предусмотрен в спецификации сервлетов), авторизация SSL - все это зависит от контейнера. В EJB такого рода проблем еще больше.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем принципиально важное значение service() метода сервлета помимо известного?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]