est-il possible de trouver les ports HTTP et HTTPS configurés pour un serveur Web Tomcat à partir du code Java de l'application Web avant toute demande HTTP ou HTTPS. P>
J'ai besoin de ces informations sur le démarrage de l'application. Je ne veux pas attendre que quelqu'un initie une requête HTTP et appeler geterverport (). p>
Ce que je veux, c'est de comprendre les ports HTTP et HTTPS au démarrage de la flux WebApplication. P>
est-ce possible? J'ai très bien cherché sur ce problème mais n'a guère trouvé des solutions. P>
3 Réponses :
Avez-vous fait référence: http://tomcat.apache.org/ tomcat-4.0-doc / config / ajp.html p>
dans la conférence Conf / Server.xml, dans la configuration du connecteur.
Voici un échantillon, P>
<!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
Pour accéder à cette configuration au moment de l'exécution, une solution consiste à créer votre propre vanne, étendue de Vous devrez avoir Catalina.jar sur votre parcours de construction. Remarque, ceci est invoqué au démarrage du serveur afin que vous fassiez stocker les informations de port dans certains stockages disponibles au niveau mondial si vous en avez besoin d'y accéder ultérieurement. P> Si vous ne voulez pas le faire dans une vanne , les choses deviendront un peu plus sale car vous devrez utiliser l'introspection et la rupture de confinement de visibilité sur le terrain. P> Il s'agit d'un échantillon d'un filtre standard qui extrait les informations de port dans le valveebase code>
et enregistrez-le dans la configuration Server.xml (voir http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html ) sous votre Moteur code>. Remplacez le
setContainer (conteneur conteneur) code> méthode. Si vous êtes inscrit sous le moteur, le paramètre code> conteneur code> doit être de type
standardengine code>
. De cela, vous pouvez appeler gettervis () code> pour faire référence à la
service code>
. Le service a une méthode FindConnectors () code>. Qui renvoie un tableau de
connecteur code>
instances, reflétant les connecteurs configurés (points de terminaison) pour votre service. D'eux, vous pouvez obtenir le port configuré en appelant getport () code>.
init () code > Méthode P>
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.catalina.Container;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardEngine;
import org.apache.commons.lang3.reflect.FieldUtils;
public class TestFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
ServletContext ctx = arg0.getServletContext();
try {
Object o = FieldUtils.readField(ctx, "context", true);
StandardContext sCtx = (StandardContext) FieldUtils.readField(o, "context", true);
Container container = (Container) sCtx;
Container c = container.getParent();
while (c != null && !(c instanceof StandardEngine)) {
c = c.getParent();
}
if (c != null) {
StandardEngine engine = (StandardEngine) c;
for (Connector connector : engine.getService().findConnectors()) {
// Get port for each connector. Store it in the ServletContext or whatever
System.out.println(connector.getPort());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Je m'attendais à une réponse beaucoup plus simple. Mais on dirait qu'il n'y a pas de solution simple à ce problème car ce cas n'est pas couvert par l'API de servlet. Par conséquent, je vais marquer cette question aussi correcte.
J'ai trouvé ce lien: coderanch.com/t / 364748 / Servlets / Java / ... . Peut-être que cela aidera.