Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要知道我的java webapp在webapp启动时运行的HTTP和HTTPS端口_Java_Tomcat_Servlets - Fatal编程技术网

我需要知道我的java webapp在webapp启动时运行的HTTP和HTTPS端口

我需要知道我的java webapp在webapp启动时运行的HTTP和HTTPS端口,java,tomcat,servlets,Java,Tomcat,Servlets,在任何HTTP或HTTPS请求发生之前,是否可以从web应用程序的java代码中找到为Tomcat web服务器配置的HTTP和HTTPS端口 我需要有关应用程序启动的信息。我不想等待有人启动HTTP请求并调用getServerPort() 我想要的是在webapplication启动时找出HTTP和HTTPS端口 这可能吗?我在这个问题上搜索得很好,但几乎找不到任何解决方案。您提到过吗:在conf/server.xml的连接器配置中 这是一个样本 <!-- A "Connector" r

在任何HTTP或HTTPS请求发生之前,是否可以从web应用程序的java代码中找到为Tomcat web服务器配置的HTTP和HTTPS端口

我需要有关应用程序启动的信息。我不想等待有人启动HTTP请求并调用getServerPort()

我想要的是在webapplication启动时找出HTTP和HTTPS端口


这可能吗?我在这个问题上搜索得很好,但几乎找不到任何解决方案。

您提到过吗:

在conf/server.xml的连接器配置中

这是一个样本

<!-- 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" />

要在运行时访问此配置,一种方法是创建自己的阀,从扩展并在
引擎下的server.xml配置中注册它(请参阅)。重写
setContainer(Container Container)
方法。如果在引擎下注册,
容器
参数的类型应为。由此,您可以调用
getService()
,以获取对的引用。该服务有一个方法
findConnectors()
。它返回一个实例数组,反映为您的服务配置的连接器(端点)。通过调用
getPort()
,可以从它们中获得配置的端口

构建类路径上需要有catalina.jar。注意,这是在服务器启动时调用的,因此如果以后需要访问端口信息,则必须将其存储在一些全局可用的存储器中

如果你不想在一个阀门里做这件事,事情会变得有点脏,因为你必须使用内省和打破现场可视性控制

这是在
init()
方法中提取端口信息的标准筛选器示例

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();
        }


    }

}

它需要commons-lang3(用于FieldUtils类)。

我找到了以下链接:。也许会有帮助。我希望得到一个更简单的答案。但是这个问题似乎没有简单的解决方案,因为ServletAPI没有涵盖这种情况。因此,我将这个问题标记为正确。