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的地方)
  • 在server.xml文件中,查找连接器端口,如下所示

    <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;
        }
    }