Java 获取端口号&;Tomcat服务器上Spring应用程序中的主机名
我的应用程序是一个基于Java 获取端口号&;Tomcat服务器上Spring应用程序中的主机名,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的应用程序是一个基于springframework3.1.2的Web应用程序,部署在apachetomcat6上 我需要在应用程序(服务器)启动时获取正在运行的应用程序的端口号和主机名。所以我会在属性上重写它,这是其他bean初始化所需要的 spring是否提供任何选项来检索这些详细信息并在服务器启动时进行设置?。Tomcat将默认在TCP/IP端口号8080上运行 台阶 导航到C:\apache-tomcat-6.0.18\conf\server.xml(安装tomcat的地方) 在serv
springframework3.1.2
的Web应用程序,部署在apachetomcat6
上
我需要在应用程序(服务器)启动时获取正在运行的应用程序的端口号和主机名。所以我会在属性上重写它,这是其他bean初始化所需要的
spring是否提供任何选项来检索这些详细信息并在服务器启动时进行设置?。Tomcat将默认在TCP/IP端口号
8080
上运行
台阶
C:\apache-tomcat-6.0.18\conf\server.xml
(安装tomcat的地方)<connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443">
</connector>
或
开始->所有程序->运行->键入“驱动程序”(不带引号)->等
谢谢。看看前面提出的两个问题:和。在这里,您将看到如何从连接器获取端口,连接器还有一个getDomain方法,可以为您提供主机名 因为您知道如何在没有spring的情况下获取这些细节,所以可以使用一个bean来获取这些细节,并为需要这些实例化细节的另一个bean提供这些细节。有几种方法可以做到这一点: 1) 创建SpringFactorybean,该bean将获得您想要的端口、主机名和实例化bean 2) 有一个单独的bean为您保存这些细节,然后您使用该bean构建另一个bean
3) 您可以使用端口和域覆盖应用程序详细信息,并且在实例化需要它们的bean时,可以使用init方法为新bean读取它们已传递给doGet的ServletRequest对象,或者doPost方法具有
getServerName()
和getServerPort()
提供此信息的方法
例如:
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host Name = " + request.getServerName());
System.out.println("Port Number = " + request.getServerPort());
}
下面是获取端口dip地址的代码
class IPAddressDemo{
public static String getIpAddressAndPort1() throws MalformedObjectNameException, NullPointerException,
UnknownHostException {
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
String host = InetAddress.getLocalHost().getHostAddress();
String port = objectNames.iterator().next().getKeyProperty("port");
String ipadd = "http" + "://" + host + ":" + port;
System.out.println(ipadd);
return ipadd;
}
}
类IPAddressDemo{
公共静态字符串getIpAddressAndPort1()引发格式错误的ObjectNameException、NullPointerException、,
未知后异常{
MBeanServer beanServer=ManagementFactory.getPlatformMBeanServer();
设置objectNames=beanServer.queryNames(新的ObjectName(“*:type=Connector,*”),
Query.match(Query.attr(“协议”)、Query.value(“HTTP/1.1”));
字符串host=InetAddress.getLocalHost().getHostAddress();
String port=objectNames.iterator().next().getKeyProperty(“端口”);
字符串ipadd=“http”+”:/“+host+”:“+port;
系统输出打印项次(ipadd);
返回ipadd;
}
}
我希望在运行时(即以编程方式)获得这些详细信息(端口号和主机名)。不在手动检查时!。伙计,你读过这个问题吗?这个答案和你的第一个一样糟糕。。。完全值得投反对票。问题是关于Spring MVC,而不是servlets。如果代理正在替换真实连接器的端口号(在server.xml中配置),并且您需要获得它,那么这就是理想的解决方案。谢谢!!
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host Name = " + request.getServerName());
System.out.println("Port Number = " + request.getServerPort());
}
class IPAddressDemo{
public static String getIpAddressAndPort1() throws MalformedObjectNameException, NullPointerException,
UnknownHostException {
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
String host = InetAddress.getLocalHost().getHostAddress();
String port = objectNames.iterator().next().getKeyProperty("port");
String ipadd = "http" + "://" + host + ":" + port;
System.out.println(ipadd);
return ipadd;
}
}