本篇来学习Tomcat常见两个配置知识,

  • 第一个是端口占用的场景以及如何解决端口占用。
    有两个解决办法,第一个是修改成别的端口启动tomcat,第二个是找到占用端口的后台进程,杀死这个进程,自然就解决了端口占用。
  • 第二个是配置默认主页,默认应用。端设置默认主页和默认应用,就是输入一个地址,我不输入URI后面的什么html文件,也能够自动打开这个html文件。

1.端口占用问题

为了重现端口占用问题,我在cmd窗口再次启动tomcat,看看发生什么。在启动过程发现出错了,一闪而过,窗口就关闭了, 只好去tomcat目录下看日志文件了。打开catalina.2019-05-05.log日志文件,找到JVM_Bind位置。

05-May-2019 16:30:49.902 严重 [main] org.apache.catalina.core.StandardServer.await StandardServer.await: create[localhost:8005]: 
 java.net.BindException: Address already in use: JVM_Bind
	at java.net.DualStackPlainSocketImpl.bind0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
	at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
	at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
	at java.net.ServerSocket.bind(ServerSocket.java:375)
	at java.net.ServerSocket.<init>(ServerSocket.java:237)
	at org.apache.catalina.core.StandardServer.await(StandardServer.java:440)
	at org.apache.catalina.startup.Catalina.await(Catalina.java:776)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:722)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)

jVM_Bind就是Java虚拟机已经绑定的意思。以后看到这个错误,就要想起端口被占用。端口默认是8080.也就是这个8080端口被占用,解决这个问题有两个办法

  1. 修改tomcat下conf下server.xml中的端口改成8080之外的,这种方法还不一定好用。
  2. 找出占用端口的程序,后台把进程杀掉就好了。

这里详细介绍下第二个方法。

在cmd里输入命令: netstat -ano, 这里我截取一部分,主要看8080这个对应进程ID。

C:\Users\wwj>netstat -ano
 
活动连接
 
  协议  本地地址          外部地址        状态           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1164
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:2179           0.0.0.0:0              LISTENING       4960
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       1508
  TCP    0.0.0.0:5040           0.0.0.0:0              LISTENING       15044
  TCP    0.0.0.0:7680           0.0.0.0:0              LISTENING       7816
  TCP    0.0.0.0:8009           0.0.0.0:0              LISTENING       7968
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       7968
  TCP    0.0.0.0:8180           0.0.0.0:0              LISTENING       4512
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING       968

在上面,找到8080占用进程的PID是7968, 然后我们去任务管理器中找到这个PID,右键选择关闭进程。

2.设置默认主页和默认应用

默认端口

这里说的默认端口是指80,之前我们是这样输入网址去访问的http://localhost:8080/MyApp01/123.html

如果通过配置,这样也能访问http://localhost/MyApp01/123.html

这个就是这里说的默认端口配置,很简单浏览器访问默认端口是80,所以,我们需要去conf/server.xml文件把tomcat端口8080改成80,前提你系统80端口没有被占用。

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

然后不加端口号也可以直接进行访问;

默认主页

什么是默认主页呢,之前我们是http://localhost/MyApp01/123.html 才能访问,

如果通过这样http://localhost/MyApp01/也能访问123.html的效果,这个就是默认主页。一般在登陆场景中我们应该经常见到;

我们这样去设置,在Tomcat中的conf下找到web.xml文件,编辑打开

在web.xml文件最后几行内容,或者搜索 welcome找到

<welcome-file-list>
        <welcome-file>123.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

welcome-file是这样的,这里默认设置了3个,如果找不到123.html就找第二个index.htm,如果第二个找不到,就找第三个,所以,这里可以设置3个默认的主页。

默认应用

这里来说,默认应用,我们的应用名称是MyApp01, 如果tomcat访问不输入这个名称,默认访问的是tomcat的默认项目。

java端口已被占用 javaweb端口被占用怎么解决_java

这个页面就是访问默认应用,就是下面这个ROOT项目。

java端口已被占用 javaweb端口被占用怎么解决_java_02


所以,我们想把这个效果改成默认使用我们自己应用MyApp01,我们可以在Tomcat的webapps目录把MyApp01重名为ROOT,重启Tomcat服务就可以。