Dans Tomcat, comment mon servlet peut-il déterminer quels connecteurs sont configurés?

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

  •  09-06-2019
  •  | 
  •  

Question

Dans Tomcat 5.5, le fichier server.xml peut comporter de nombreux connecteurs, généralement le port 8080 uniquement, mais pour mon application, un utilisateur peut configurer son servlet.xml pour que d'autres ports soient également ouverts (par exemple 8081-8088). J'aimerais que mon servlet sache quels ports de connexion de socket seront vaild (Au cours de Servlet.init (), tomcat n'a pas encore démarré les connecteurs.)

Je pourrais trouver et analyser le server.xml moi-même (minable), je pourrais regarder les noms des threads (après le démarrage de tomcat - mais comment saurais-je qu’il est temps de le faire?) Mais je préférerais un solution qui peut s'exécuter dans mon servlet.init () et déterminer quelle sera la plage de ports valide. Des idées? Une solution peut être étroitement liée à Tomcat pour mon application qui ne pose pas de problème.

Était-ce utile?

La solution

Dans Tomcat 6.0, cela devrait ressembler à:

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

pour obtenir les services. Après cela, vous pourriez utiliser

Service.findConnectors

qui retourne un connecteur qui a finalement la méthode

Connector.getPort

Voir le JavaDocs pour les détails.

Autres conseils

Pourquoi?

Si vous avez besoin pendant la génération de la page pour une URL de fichier image ou css, qu'est-ce qui ne va pas avec ServletRequest.getLocalPort () ou, mieux encore, HttpServletRequest.getContextPath () pour tout le charab??

Quoi que vous soyez sur le point de faire, je ne prendrais pas la route spécifique de Tomcat.

Si vous avez vraiment besoin de localiser différents ports, configurez-les sur votre application Web à l'aide du moyen de configuration habituel, par exemple. spécifier des valeurs. Vous n’auriez aucune découverte automatique, mais cela ne casserait pas non plus la prochaine mise à jour de tomcats.

Plus précisément, je dirais que je pense que vous avez posé la mauvaise question. Par exemple. vous avez votre besoin, opté pour une solution et demandé comment l'implémenter. Je pense que vous obtiendrez de meilleures réponses si vous énonçiez votre exigence de première main et demandiez une solution à ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top