栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我需要知道我的Java WebApp正在Webapp启动时运行的HTTP和HTTPS端口

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我需要知道我的Java WebApp正在Webapp启动时运行的HTTP和HTTPS端口

要在运行时访问此配置,一种方法是创建自己的Valve,从

Valvebase
Server.xml配置进行扩展并将其注册(请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/valve
(.html
Engine
。覆盖
setContainer(Containercontainer)
方法。如果在引擎下注册,则
container
参数应为类型
StandardEngine
。由此,您可以调用
getService()
以获得对的引用
Service
。该服务有一个方法
findConnectors()
。这将返回一个
Connector
实例数组,以反映为您的服务配置的连接器(端点)。从他们那里,您可以通过调用获取已配置的端口
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类)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号