在 ContextListener 的内部,我如何找出 Web 应用程序所在的端口 运行
In the internals of an ContextListener how can I find out the port the Web App is running on
在 ContextListener 的内部,我如何找出 Web 应用程序 运行 在
上的端口
我有一个 Java Web 应用程序项目,前端是 JSP 个页面。该项目实现了一个 ServletContextListener
来连接到后端。此 ContextListener 通过在其 contextInitialized
方法中实例化 access class DBQuery
来访问数据库:
ServletContext ctx = contextEvent.getServletContext();
dbQuery = new DBQuery();
ctx.setAttribute("dbQuery", dbQuery);
JSP 页面然后通过
引用此 DBQuery
对象
getServletContext().getAttribute("dbQuery");
并根据需要调用 DBQuery
的方法。
现在的问题是:在 DBQuery
class 中,我需要根据 Web 应用运行的主机和端口执行不同的操作。
我找到了一种在 DBQuery 中确定 主机名 的方法:
import java.net.InetAddress;
String hostName = InetAddress.getLocalHost().getHostName();
奇怪的是 InetAddress
似乎没有办法获取 端口号 。我如何在 DBQuery
class 中找到 Web 应用程序运行的端口?
在 Steve's comment to look at a GitHub gist 之后,我想出了以下经过改编的代码,它完全符合要求:
String port = "80";
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objs = mbs.queryNames( new ObjectName( "*:type=Connector,*" ),
Query.match( Query.attr( "protocol" ), Query.value( "HTTP/1.1" ) ) );
for ( ObjectName obj : objs ) {
String scheme = mbs.getAttribute( obj, "scheme" ).toString();
port = obj.getKeyProperty( "port" );
break;
}
} catch ( MalformedObjectNameException | UnknownHostException | MBeanException | AttributeNotFoundException | InstanceNotFoundException | ReflectionException ex ) {
ex.printStackTrace();
}
所以最主要的是实例化一个MBeanServer
并利用它的属性。
在 ContextListener 的内部,我如何找出 Web 应用程序 运行 在
上的端口我有一个 Java Web 应用程序项目,前端是 JSP 个页面。该项目实现了一个 ServletContextListener
来连接到后端。此 ContextListener 通过在其 contextInitialized
方法中实例化 access class DBQuery
来访问数据库:
ServletContext ctx = contextEvent.getServletContext();
dbQuery = new DBQuery();
ctx.setAttribute("dbQuery", dbQuery);
JSP 页面然后通过
引用此DBQuery
对象
getServletContext().getAttribute("dbQuery");
并根据需要调用 DBQuery
的方法。
现在的问题是:在 DBQuery
class 中,我需要根据 Web 应用运行的主机和端口执行不同的操作。
我找到了一种在 DBQuery 中确定 主机名 的方法:
import java.net.InetAddress;
String hostName = InetAddress.getLocalHost().getHostName();
奇怪的是 InetAddress
似乎没有办法获取 端口号 。我如何在 DBQuery
class 中找到 Web 应用程序运行的端口?
在 Steve's comment to look at a GitHub gist 之后,我想出了以下经过改编的代码,它完全符合要求:
String port = "80";
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objs = mbs.queryNames( new ObjectName( "*:type=Connector,*" ),
Query.match( Query.attr( "protocol" ), Query.value( "HTTP/1.1" ) ) );
for ( ObjectName obj : objs ) {
String scheme = mbs.getAttribute( obj, "scheme" ).toString();
port = obj.getKeyProperty( "port" );
break;
}
} catch ( MalformedObjectNameException | UnknownHostException | MBeanException | AttributeNotFoundException | InstanceNotFoundException | ReflectionException ex ) {
ex.printStackTrace();
}
所以最主要的是实例化一个MBeanServer
并利用它的属性。