在Tomcat服务器上的Spring应用程序中获取端口号和主机名

11

我的应用是基于 Spring框架3.1.2 的Web应用,部署在 Apache Tomcat 6 上。

我需要在应用(服务器)启动时获取运行中的应用程序的 端口号主机名。这样我就可以将其覆盖到一个属性上,并且其他bean初始化需要使用它。

Spring是否提供了检索这些细节并在服务器启动时设置它们的选项?..

4个回答

6
请看之前提出的两个问题:Get the server port number from tomcat with out a requestI need to know the HTTP and HTTPS port my java webapp is running on webapp startup。在那里,你会看到如何从连接器中获取端口,连接器还有一个getDomain方法,可以给出主机名。
既然你知道如何不使用Spring获取端口信息,那么你可以创建一个Bean来获取这些细节,并为需要这些实例化细节的其他Bean提供它们。有几种方法可以做到这一点:
1)创建Spring工厂Bean,该Bean将获取端口、主机名并实例化您想要的Bean
2)拥有一个单独的Bean来保存这些详细信息,并使用该Bean来构建其他Bean
3)覆盖应用程序详细信息中的端口和域,并在实例化需要它们的Bean时具有读取它们的init方法

5
这里是获取端口和IP地址的代码。
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;
    }
}

如果代理替换了在server.xml中配置的真实连接器端口号,并且您需要获取它,那么这是一个好的解决方案。非常感谢! - Renat Gatin

-3

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>

Connector标签中的端口是您的端口号。

查找主机名:

步骤

1. Navigate to `C:\WINDOWS\system32\drivers\etc` 

或者

开始->所有程序->运行->输入'drivers'(不含引号)->等等

  1. 用文本编辑器打开hosts文件,你会发现
127.0.0.1       localhost

通过这个,你可以了解你的主机名是什么。

谢谢。


2
我想在运行时(即以编程方式)获取这些详细信息(端口号和主机名),而不是手动检查!。 - omega

-4

已传递到您的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());
}

8
兄弟,你看过问题吗?这个答案和你的第一个答案一样糟糕......完全值得被踩。 - Yevgeniy
这个问题是关于Spring MVC而不是servlet的。 - Software Prophets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接