【问题标题】:How to get Tomcat 7 to run on Port 80 on Windows Server 2008?如何让 Tomcat 7 在 Windows Server 2008 的 80 端口上运行?
【发布时间】:2015-02-24 17:56:29
【问题描述】:

我花了两天时间试图让它工作。

当我第一次启动 Tomcat 7 时,它在端口 8080 上运行,这是 Tomcat 的默认设置。因此可以访问它,但输入:http://localhost:8080/mydomain.com:8080

但我希望从端口8080 移动到端口80,这样我就可以输入mydomain.com 并被定向到网页。

我已禁用所有可能在端口 80 上运行的额外服务,例如 IIS、MSSQL、万维网发布等。

server.xml 文件中,我进行了以下更改:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

然后当我启动服务器时,我在日志中得到了这个(尽管服务器启动了):

...
Dec 27, 2014 9:34:44 PM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-80"]
java.lang.Exception: Socket bind failed: [730048] Only one usage of each socket address (protocol/network address/port) is normally permitted.  
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:453)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:821)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)

Dec 27, 2014 9:34:44 PM org.apache.catalina.core.StandardService initInternal
SEVERE: Failed to initialize connector [Connector[HTTP/1.1-80]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:821)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:638)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:980)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    ... 12 more
Caused by: java.lang.Exception: Socket bind failed: [730048] Only one usage of each socket address (protocol/network address/port) is normally permitted.  
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:453)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:978)
    ... 13 more

Dec 27, 2014 9:34:44 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
Dec 27, 2014 9:34:44 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3310 ms
Dec 27, 2014 9:34:44 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Dec 27, 2014 9:34:44 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.57
Dec 27, 2014 9:34:44 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\docs
Dec 27, 2014 9:34:46 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\docs has finished in 1,985 ms
Dec 27, 2014 9:34:46 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\examples
Dec 27, 2014 9:34:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\examples has finished in 1,234 ms
Dec 27, 2014 9:34:47 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\host-manager
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\host-manager has finished in 453 ms
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\manager
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\manager has finished in 313 ms
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Apache\tomcat\webapps\ROOT
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Apache\tomcat\webapps\ROOT has finished in 156 ms
Dec 27, 2014 9:34:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-apr-8009"]
Dec 27, 2014 9:34:48 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4282 ms

当我访问 url mydomain.com 时什么都看不到

我对此非常陌生 - 已经浏览了很多在线帖子并按照说明进行操作,但似乎没有任何效果。我之前做过同样的步骤,效果很好。

我现在必须做什么?请帮忙。

这就是我在netstat 上得到的结果

【问题讨论】:

  • 双击Tomcat服务器,然后将Server Locations切换到用户Tomcat安装i.stack.imgur.com/3eDSs.png
  • 我没有使用 Eclipse。
  • 在eclipse的控制台旁边你会发现Servers只需双击Tomcat V7.....然后你会看到这个窗口i.stack.imgur.com/3eDSs.png
  • 但我没有使用 Eclipse..
  • 你在用什么?

标签: java apache tomcat tomcat7 windows-server-2008


【解决方案1】:

其他一些应用程序正在使用端口 80。执行本地端口扫描并使用 netstart 打印可执行路径(此视频将有所帮助: https://www.youtube.com/watch?feature=player_detailpage&v=V3nWkr7v4-E#t=7)

通常是它的 Skype(或其他聊天或点对点文件共享应用程序)。关闭Skype(退出不仅仅是退出,进程应该退出)然后启动tomcat。然后可以重新启动Skype,它会在其他一些端口上正常工作。

还有任何防火墙条目阻止 Java 绑定到此端口?可以从您的防火墙规则中检查 - 如果您使用控制面板中的默认 Windows 防火墙。 https://www.youtube.com/results?search_query=widows+firewall+java+allow 这些结果或常规搜索引擎中的相同术语将告诉您允许 Java 的步骤。通常 Windows 会在您第一次运行应用程序时询问。所以如果你说不,它就会记住这一点。还需要具有管理员角色(登录/或提示用户)才能进行这些更改。对于某些问题也有助于打开管理控制台。右键单击cmd.exe并选择以管理员身份运行,对安全提示说是。

此程序可能会有所帮助,请将其保存到名为“PortCheck.java”的文件中

    class PortCheck{
    public static void main(String []args) throws Exception{
        String port = "80";
        if(args.length > 0)port = args[0];
        final int p = Integer.parseInt(port);
        Thread t = new Thread(){
            public void run(){

                try{
                    java.net.ServerSocket s = new java.net.ServerSocket(p);
                    System.out.println("\nListening on port " + p);
                    s.accept();
                }catch(Exception e){
                    System.out.println("Err " + e);
                }
            }
        };
        t.start();
        Thread.sleep(2000);
        System.out.println("Bye ");
        System.exit(0);
    }
}

编译

javac c:\_your_path\PortCheck.java

并运行它:

java -cp c:\_your_path 端口检查

如果成功绑定到80会告诉你:

监听 80 端口 再见

443端口也可以试试

【讨论】:

  • 我没有在我的本地机器上运行它。我正在尝试在 Microsoft Server 2008 上运行它。所以没有 Skype。我已经完成了你提到的一切。没有额外的服务在端口 80 上运行。只是 TCP 正在监听。
  • 哪个 TCP 和在哪个端口上?你检查过防火墙规则吗? 80 端口是免费的吗?
  • 我检查了端口 80 - 它只是说 TCP 处于监听状态。它的外国地址是我的域名 - 我假设这意味着 80 端口是免费的?
  • 我也检查了防火墙规则,并遵循了这些视频中显示的所有内容。我还是不明白怎么回事
  • 好的,我不知道它是如何工作的,但这就是我所做的:1)在命令提示符中netstat -p TCP -ao 2)taskkill /F /PID 4220(占用端口 80 的进程的 PID) 3) service.bat uninstall 卸载 Tomcat7 4) service.bat install 重新安装 Tomcat7 不知何故,这行得通!至少重复4次之后!谢谢一百万,@tgkprog!
猜你喜欢
  • 2011-11-13
  • 2012-07-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多