我的应用程序是Spring framework 3.1.2
部署在Apache tomcat 6
.
我需要在应用程序(服务器)启动时获取正在运行的应用程序端口号和主机名。这样我就可以在属性上覆盖它,并且需要其他 bean 初始化。
spring 是否提供任何选项来检索这些详细信息并在服务器启动时设置它?..
我的应用程序是Spring framework 3.1.2
部署在Apache tomcat 6
.
我需要在应用程序(服务器)启动时获取正在运行的应用程序端口号和主机名。这样我就可以在属性上覆盖它,并且需要其他 bean 初始化。
spring 是否提供任何选项来检索这些详细信息并在服务器启动时设置它?..
看看之前提出的两个问题:Get the server port number from tomcat without a request,我需要知道我的 java webapp 在 webapp startup 上运行的 HTTP 和 HTTPS 端口。在那里,您将看到如何从连接器获取端口,连接器还具有 getDomain 方法,可以为您提供主机名。
由于您知道如何在没有 spring 的情况下获得,因此您可以拥有一个获取这些详细信息的 bean,并将它们提供给需要这些实例化详细信息的其他 bean。有几种方法可以做到这一点:
1) 创建 Spring 工厂 bean,它将获取端口、主机名并实例化您想要的 bean
2)有一个单独的bean为你保存这些细节,你用那个bean来构造另一个
3)您使用端口和域覆盖您的应用程序详细信息,并且在实例化需要它们的bean时有一个init方法可以为您的新bean读取它们
这是获取端口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;
}
}
Tomcat 将默认在 TCP/IP 端口号上运行8080
。
脚步
C:\apache-tomcat-6.0.18\conf\server.xml
(安装tomcat的地方)在 server.xml 文件中,找到如下所示的连接器端口
<connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443">
</connector>
连接器标签中的端口是您的端口号。
查找主机名:
脚步
1. Navigate to `C:\WINDOWS\system32\drivers\etc`
或者
开始->所有程序->运行->键入“驱动程序”(不带引号)->等
127.0.0.1 localhost
从这里您可以了解您的主机名是什么。
谢谢。
已传递给 doGet 或 doPost 方法的 ServletRequest 对象具有提供此信息的方法getServerName()
。getServerPort()
例子:
public void doGet(ServletRequest request, ServletResponse response) {
System.out.println("Host Name = " + request.getServerName());
System.out.println("Port Number = " + request.getServerPort());
}