Как в Tomcat мой сервлет может определить, какие соединители настроены?

В Tomcat 5.5 файл server.xml может иметь множество коннекторов, обычно только порт 8080, но для моего приложения пользователь может настроить свой файл servlet.xml так, чтобы были открыты и другие порты (скажем, 8081-8088). Я хотел бы, чтобы мой сервлет выяснил, какие порты соединений сокетов будут доступны (во время Servlet.init() tomcat еще не запустил соединители.)

Я мог бы найти и разобрать server.xml самостоятельно (гротко), я мог бы посмотреть на имена потоков (после запуска tomcat — но как я узнаю, когда настало подходящее время для этого?) Но я бы предпочел решение, которое может выполните в моем servlet.init() и определите, какой будет допустимый диапазон портов. Любые идеи? Решение может быть жестко привязано к Tomcat для моего приложения, и это нормально.


person Bob Herrmann    schedule 15.09.2008    source источник


Ответы (3)


В Tomcat 6.0 это должно быть примерно так:

org.apache.catalina.ServerFactory.getServer().getServices 

чтобы получить услуги. После этого вы можете использовать

Service.findConnectors

который возвращает соединитель, который, наконец, имеет метод

Connector.getPort

См. JavaDocs. детали.

person jrudolph    schedule 15.09.2008
comment
Хам. Может ли сервлет получить доступ к org.apache.catalina.ServerFactory? Я думал, что это будет в загрузчике классов сервера и в доступном для сервлета. - person Bob Herrmann; 15.09.2008
comment
К вашему сведению: я на Tomcat 5.5.17. - person Bob Herrmann; 10.10.2008

Почему?

Если вам нужно во время создания страницы URL-адрес файла изображения или CSS, что не так с ServletRequest.getLocalPort() или, что еще лучше, HttpServletRequest.getContextPath() для всего этого?

person sblundy    schedule 15.09.2008
comment
Что ж, в моем приложении есть этап настройки, на котором разные службы подключаются к разным портам. Я хочу убедиться, что на этапе настройки я могу убедиться, что служба настроена на прослушивание порта, на котором tomcat принимает соединения. - person Bob Herrmann; 15.09.2008

Что бы вы ни собирались делать - я бы не пошел по пути, специфичному для котов.

Если вам действительно нужно найти разные порты, настройте их для своего веб-приложения с помощью обычных средств настройки, например. указание значений. У вас не будет автоматического обнаружения, но также оно не сломается при следующем обновлении tomcats.

Более конкретно, я бы сказал, что я считаю, что вы задали неправильный вопрос. Например. у вас есть требование, вы выбрали одно решение и спросили, как реализовать это решение. Я считаю, что вы получите лучшие ответы, если вы изложите свое требование из первых рук и попросите решение для этого.

person Olaf Kock    schedule 22.09.2008