| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Сервлет. определить порт, на который пришёл запрос |
| Автор: KostenkoSergey 27.12.2005, 15:35 |
| как можно определить порт, на который пришёл запрос в теле init() - метода сервлета ? |
| Автор: Domestic Cat 27.12.2005, 16:06 | ||
Насколько я понимаю - никак. В доках сказано:
Проще говоря, сначала создается инстанс сервлета, затем вызывается init, после чего сервлет способен обрабатывать реквесты. Из ServletRequest объекта порт можно получить в методах, где он обрабатывается, в том же service: http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/ServletRequest.html#getServerPort() |
| Автор: KostenkoSergey 27.12.2005, 16:27 | ||
... вот я такое нарыл - а хотелось бы |
| Автор: COVD 27.12.2005, 18:13 |
| А зачем определять? Есть порт, на котором слушает контейнер сервлетов (Томкат, например), и это обычно порт 80 или 8080. Сервлет не работает с портом, реквесты ему передает контейнер сервлетов и ему же он возвращает респонс. |
| Автор: KostenkoSergey 27.12.2005, 19:08 |
| у меня на одном хосте запущено два контейнера - в методе инит происходит считывание из файла адреса, куда редеректить запрос дальше (локалхост:8080 - например). вот собсно ... |
| Автор: COVD 27.12.2005, 19:34 |
| У сервлета есть методы doPost и doGet, в которые контейнер передает обьекты реквеста и респонса. Первый обьект(реквест) - это труба, из которой в сервлет поступают параметры запроса. Второй обьект(респонс) - труба, в которую сервлет должен выбросить свой ответ. Сервлет -это как статический метод. Таким образом, кто прислал запрос , тот и получит ответ. Это ответственность контейнера вернуть ответ автору запроса. |
| Автор: KostenkoSergey 27.12.2005, 19:58 |
| я вкурсе |
| Автор: 3,14 28.12.2005, 10:18 | ||
Вобще-то всё просто:
|
| Автор: Domestic Cat 28.12.2005, 11:23 | ||
Это в теле init метода? |
| Автор: 3,14 28.12.2005, 13:20 | ||
Извиняюсь, не обратил внимание что нужно именно в init-е это сделать... |
| Автор: 3,14 28.12.2005, 13:33 | ||
Тогда вопрос не корректный, в init не могут приходить запросы |
| Автор: KostenkoSergey 28.12.2005, 16:30 | ||
- нет, ну Вы посмотрите на него Вопрос ему некоректный..... - 3 поста "в тему" сделал... Инит вызывается перед перевым обращением к ДО_*... после обращения к сервлету. |
| Автор: Domestic Cat 28.12.2005, 16:33 |
| Модератор: Не оффтопить Вопрос действительно некорректный. |
| Автор: alexsmirnov 30.12.2005, 18:01 |
| Вобще-то, когда и сколько раз вызывается init() - это забота контейнера. Обычно создается pool instance сервлетов, Tomcat 5.5.12 это делает вообще при старте приложения, до каких-либо запросов. И далее из этого пула выбираются экземпляры для обработки. Поэтому, init() может вызваться раз 5 ( или как настроен контейнер ) до каких-либо запросов, если сервер перегружен - по мере поступления запросов пул может расширяться ( и опять будет вызываться init() ). А инициализированный сервлет обрабатывает МНОГО запросов - который из них тебе нужен ? Первый ? Сотый ? Миллионный ? |
| Автор: chief39 3.1.2006, 12:34 | ||
Я так понимаю, вопрос в том, предоставляет ли сервер какое-то АПИ для считывания своих настроек.
Насколько мне понятна суть проблемы - это не имеет значения - конфигурация сервера всё равно одна. И если уточним порт при каждой инициализации нового сервлета - невелика беда. Вот только... можно ли это узнать? Каким-то документированным или недокументированным способом? Вроде бы всё катится к тому, что "нет" |
| Автор: alexsmirnov 7.1.2006, 23:48 |
| Естественно, нет. Поскольку запросы на разные порты могут обрабатываться одним сервлетом. Для которого init() вызывается один раз. |