项目开发管理端后台程序,要换成JFinal框架,在搭建Demo框架完成后,Run As 项目中的Config文件后,提示80端口被占用。
好了,问题简单粗暴,解决80端口就OK了。
真的简单?Really粗暴?No! 下面是复杂的解决过程……
1、先看看什么是80端口,它和8080、8001等端口有何区别?
80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。可以通过HTTP地址(即常说的“网址”)加“:80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“:80”了。--百度百科
也就是说,只要我们想上网,就必须开放80端口。在有的解决80端口被占用的方案中,发现有的文章建议关闭Http Service,简直是Kidding me……
8080、8001等端口其实本质上没什么区别,而且它们本身无实际意义,只是用于代理服务器端口来代理服务,如tomcat、nginx、IIS等。大部分服务提供方都默认使用8080端口用于WWW代理服务,因此经常会发现8080端口被占用的情况。但我们可以通过配置文件修改,如改成8001等。
2、如何解决的端口占用?
首先,看看到底是谁占用了80端口:查看80端口占用方法。发现是System占用了,System是什么鬼?系统进程啊!
顿时有些懵~ 好吧,继续go,在任务管理器中找到System进程后,选中,结束进程,发现并没有什么效果。
百度,在dos窗口结束该进程的方法,依然无效。后来查了一下System进程,发现他是Windows页面内存管理进程,拥有0级优先权,没有它系统无法启动。 也就是说,System进程是无法关闭的,如果你强行结束system进程树会直接导致蓝屏。头破血流过来的,您就不要试了吧~
后来猜想可能是IIS占用的,于是关闭了IIS中的应用,如图:
运行Eclipse下的demo,依然被占用……
后来朋波也遇到了这个问题,发现是SqlServer的Reporting Service占用了这个端口,就停止了该报表服务。
然后运行Demo,就解决了这个问题,成功解除了80端口占用。
对于Windows系统专用的,像IIS,或者微软公司的产品,如SQLServer,感觉都怪怪的。他们虽然占用了80端口,但在进程列表中并不显示出来。
3、后续……
demo运行成功了,于是停止Eclipse对它的服务,然后引入实际的项目程序,再次运行发现还是80端口占用!!!
好吧,已经无语了。
于是继续执行查看80端口的进程,发现是javaw.exe占用了该端口。这次问题就比较明朗了,肯定是上面的demo占用了80端口没有释放,于是删除了demo,再执行项目就没问题了,试了几次都保持success。
小结:解决这个问题的过程反映出我们分析和解决问题时要从多角度考虑:有那些解决思路:无脑百度、问题分析等。理清问题中的“节点”:如80端口是什么、System进程是什么、什么运行环境下产生的问题。这样我们就会做到遇事不乱、心中有数。