前两天在更新完tomcat后启动时报错,内容如下:

2013-06-18 18:58:26  org.apache.coyote.http11.Http11AprProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
2013-06-18 18:58:26  org.apache.coyote.ajp.AjpAprProtocol start
INFO: Starting Coyote AJP/1.3 on ajp-8009
2013-06-18 18:58:26  org.apache.catalina.startup.Catalina start
INFO: Server startup in 4218 ms
2013-06-18 18:58:26  org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[8005]:
java.net.BindException: Cannot assign requested address
       at java.net.PlainSocketImpl.socketBind(Native Method)
       at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
       at java.net.ServerSocket.bind(ServerSocket.java:319)
       at java.net.ServerSocket.<init>(ServerSocket.java:185)
       at org.apache.catalina.core.StandardServer.await(StandardServer.java:373)
       at org.apache.catalina.startup.Catalina.await(Catalina.java:647)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:607)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)


   看到这个报错我的第一反应就是端口被占用,用netstat -ant命令查看发现8005端口没有被占用,也可以看到 tomcat的进程已经存在,但是不能对外提供服务

       于是在网上搜索关键字Cannot assign requested address,查看很多都是因为端口被占用导致,但也有不是的,其中有一篇是说出现Cannot assign requested address的原因是localhost被路由到了别的机器

在命令窗口

ping localhost

发现确实被路由到了别的机器(一个202.x.x.x的IP),打开/etc/hosts发现没有指定127.0.0.1的解析地址。

这下就解决问题了,修改localhost让它重新指向本机地址 127.0.0.1  # vim /etc/hosts 然后增加一行

127.0.0.1 localhost    

重新启动tomcat正常