No Tomcat, como meu servlet pode determinar quais conectores estão configurados?
-
09-06-2019 - |
Pergunta
No Tomcat 5.5, o server.xml pode ter muitos conectores, normalmente apenas a porta 8080, mas para meu aplicativo, um usuário pode configurar seu servlet.xml para também ter outras portas abertas (digamos 8081-8088).Gostaria que meu servlet descobrisse quais portas de conexões de soquete estarão disponíveis (durante o Servlet.init() o Tomcat ainda não iniciou os conectores).
Eu poderia encontrar e analisar o server.xml sozinho (grotty), poderia olhar os nomes dos threads (após a inicialização do Tomcat - mas como saberia quando seria um bom momento para fazer isso?) Mas eu preferiria uma solução que pudesse ser executada em meu servlet.init() e determinar qual será o intervalo de portas válido.Alguma ideia?Uma solução pode ser fortemente vinculada ao Tomcat para meu aplicativo, tudo bem.
Solução
No Tomcat 6.0 deveria ser algo como:
org.apache.catalina.ServerFactory.getServer().getServices
para obter os serviços.Depois disso você pode usar
Service.findConnectors
que retorna um Conector que finalmente possui o método
Connector.getPort
Veja o JavaDocs para os detalhes.
Outras dicas
Por que?
Se você precisar durante a geração da página de uma imagem ou URL de arquivo CSS, o que há de errado com ServletRequest.getLocalPort() ou, melhor ainda, HttpServletRequest.getContextPath() para toda a coisa?
O que quer que você esteja prestes a fazer - eu não seguiria o caminho específico do Tomcat.
Se você realmente precisar localizar portas diferentes, configure-as em seu webapp através dos meios de configuração usuais - por exemplo.especificando valores.Você não teria nenhuma descoberta automática, mas também não será interrompida na próxima atualização do Tomcats.
Mais especificamente, eu diria que acredito que você fez a pergunta errada.Por exemplo.você tem sua necessidade, optou por uma solução e perguntou como implementar essa solução.Acredito que você obteria respostas melhores se declarasse seu requisito em primeira mão e pedisse uma solução para isso.