No Tomcat, como meu servlet pode determinar quais conectores estão configurados?

StackOverflow https://stackoverflow.com/questions/65530

  •  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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top