服务器/Tomcat

Tomcat是常见的免费的web服务器.
Tomcat 这个名字的来历,Tomcat是一种野外的猫科动物,不依赖人类,独立生活。 Tomcat的作者,取这个名字的初衷是希望,这一款服务器可以自力更生,自给自足,像Tomcat这样一种野生动物一般,不依赖其他插件,而可以独立达到提供web 服务的效果。

详细教程

如何启动TOmcat

下载 tomcat.rar–>运行批处理文件: D:/tomcat/bin/startup.bat(这里我用的Tomcat 9.0版本的,启动时候出现了控制台乱码,可以修改tomcat的conf下的logging.properties中的参数:

java.util.logging.ConsoleHandler.encoding = GBK)

最后如果你看到Server startup in xxx ms,就表明启动成功了。
注 :Tomcat启动之后,不要关闭。。。。 关闭了就不能访问了。。。。

部署一个网页

部署一个功能完备的web应用 有很多种方式,但是如果只是部署一个test.html,很简单
把test.html 复制到 D:\tomcat\webapps\ROOT 目录下,就可以通过 http://127.0.0.1:8080/test.html 访问.

8080是什么

8080是tomcat默认使用的端口号
平时上网的网址,比如 http://12306.com/index.html 是没有端口号的,也可以给tomcat改端口
tomcat默认的端口号是8080,可以通过配置把端口号修改成80

tomcat改端口

server.xml
tomcat的端口配置相关信息在 server.xml
server.xml 记录了非常多的tomcat配置信息,其中就包括端口
用记事本打开 D:\tomcat\conf\server.xml
查询 ctrl+f,输入8080
可以找到两个8080,一个在注释中,不用理会。 另一个是

<Connector port="8080" protocol="HTTP/1.1"             connectionTimeout="20000" redirectPort="8543" />

这就表明使用的是8080端口,把它修改为80,保存。
接着,必须重启tomcat
重启tomcat就是先关掉之前打开的startup.bat,再运行startup.bat
80端口:
接着就可以直接通过 http://127.0.0.1/test.html访问网页了。
80端口就是web服务默认的端口号,所以就不需要显式写这个端口号了

80端口被占用:

有时候80端口被占用了,无法使用该端口。、在这里插入图片描述
端口被占用就无法启动tomcat,所以要找到端口被占用的程序是哪一个,然后再关闭对应的程序即可
1.查看80端口被哪些程序占用了
使用命令

netstat -ano|findstr "80"

在这里插入图片描述

查看 端口号包含"80"的占用情况
查询结果找到 80,8009,8005 (这三个都包含80)。对应的pid(process id) 进程id1828
2.根据pid(进程id) 查询对应的应用程序
使用命令:

tasklist|findstr "1828"

在这里插入图片描述
1828根据上一步找到的对应的pid,发现是一个java.exe程序占用了80端口
3.根据名称 结束该程序
最后使用

taskkill /f /t /im java.exe

在这里插入图片描述结束java.exe
结束成功会提示:
成功: 已终止 。。。
或者通过pid终止:

taskkill /f /pid 1828

问题排查

Tomcat常见的问题,如不能启动,屏幕一闪而过,启动之后,访问总是出现404等等常见问题。
以下排查手段都是针对通过startup.bat 独立方式启动的Tomcat,集成开发环境IDE(IDEA,ECLIPSE,MYECLIPSE等) 下的Tomcat启动不在此知识点讨论范围之内。

点击startup.bat之后,屏幕一闪而过

1.检验:如图所示, 首先通过cmd命令进入控制台,然后切换到对应的目录执行startup命令,得到JRE_HOME environment .... 这么个提示,就表示JAVA_HOME环境变量没有设置。
分析:Tomcat本身是JAVA程序,必须要有JDK才可以执行,所以必须配置JAVA_HOME。
解决:配置JAVA_HOME,
在这里插入图片描述
2.检验:如图所示, 首先通过cmd命令进入控制台,然后切换到对应的目录执行startup命令,得到CATALINA_HOME environment .... 这么个提示,就表示CATALINA_HOME环境变量设置错误。
分析:Tomcat执行必须依赖CATALINA_HOME或者CATALINA_BASE这两个环境变量。 如果没有在环境变量里配置过,那么会自动采用bin目录的父目录作为CATALINA_HOME和CATALINA_BASE。 如果配置了,而所配置的地方又不是正确的TOMCAT目录,那么就会出现这个错误。
解决:

  1. 在环境变量中删除CATALINA_HOME,CATALINA_BASE的配置,记得不仅要检查环境变量,还要检查用户变量。
  2. 或者把CATALINA_HOME设置为正确的TOMCAT目录。

在这里插入图片描述

Tomcat可以成功启动,但是就是不能访问自己配置的web应用,老是提示404错误

检验:如图所示, 在环境变量里,CATALINA_HOME设置在了另一个合法的tomcat目录上,所以无论运行哪个startup.bat,都会导致这个d:/tomcatxxxx目录下的程序被启动,而不是你期望的那个。
分析:默认的Tomcat会优先根据环境变量中的CATALINA_HOME来定位目录,并运行。
解决:

  1. 在环境变量中删除CATALINA_HOME,CATALINA_BASE的配置,记得不仅要检查环境变量,还要检查用户变量。
  2. 或者使用网站的纯净版 Tomcat,已经取消了对环境变量CATALINA_HOME和CATALINA_BASE的依赖。

屏幕一闪而过,或者不会关闭,但是提示大量错误,其中会看到如图所示的Address already in use: JVM_Bind :80,即表示端口被占用了

检验:如果是这个错误,在TOMCAT目录下的logs目录里,会有一个日志文件:catalina.yyyy-mm-dd.log(当天时间),在这个日志文件里会记载一样的错误:Address already in use: JVM_Bind <null>:80。即表明80端口被占用了。
分析:端口是独占式的,一旦一个程序占用了这个端口,其他程序就不能够再去占用它了。而80端口,有可能是被已经存在的Tomcat占用了,也有可能是被其他不知名的软件占用了,比如Apache,IIS,Oracle等等,可以关闭占用的程序,或者更改端口号
在这里插入图片描述

404错误

1.localhost.yyyy-mm-dd.log
检验:打开tomcat/logs目录里的localhost.yyyy-mm-dd.log文件,发现大量的报错信息。
分析:当server.xmlweb.xml配置错误的时候,当前web应用就会部署失败,并且会将错误信息输出到localhost.yyyy-mm-dd.log文件中。
解决: 要在localhost.yyyy-mm-dd.log文件中看提示什么错误,有可能是配置的context目录不存在,有可能是多了一个>符号,具体问题,具体分析了。
在这里插入图片描述
2.现象:404错误,明明有文件,但是就是不能访问
检验:这个严格地说,也是配置失败,但是tomcat不会大量报错,只会偷偷地来这么一句: startup failed due to previous errors
分析:过滤器启动失败就会报这个错。
解决:同样的,过滤器启动失败原因也是多种多样,好在它都会把具体错误信息输出到localhost.yyyy-mm-dd.log,这样打开localhost.yyyy-mm-dd.log根据实际情况分析,就可以较快定位问题所在了。
在这里插入图片描述
3.404错误,明明有文件,但是就是不能访问。
检验:在命令行中运行java -version 检查一下当前java的版本
分析:当部署的web应用中的类是由高版本JDK编译生成,而当前tomcat运行所使用的JDK又是低版本的话,就会报出如图所示的错误:UnsupportedClassVersionError,进而导致web应用启动失败。
解决:请使用JDK8或者更高版本,请参考 检测JDK版本,以及下载与配置
在这里插入图片描述

404问题大排查

404问题:404表示File Not Found, 文件不存在错误。
可能的问题:

正确的端口号

出现404错误证明,TOMCAT是启动成功了的。 但是在一台计算机上,可以启动多个端口号不一样的TOMCAT,所以请确保自己访问的是正确的那个端口号,别自己启动的是8080端口号的TOMCAT,但是访问的地址却用的是80端口(默认),这样肯定会出现404错误的。

环境变量

假设有两个Tomcat A和 B,自己分明运行的是B 下的startup.bat, 但是启动的却是A,为什么会这样呢? 这就是环境变量在作祟了。
在环境变量中有两个属性:分别是CATALINA_HOME和CATALNIA_BASE,如果这个值指向的是A,那么即便运行的是B下的startup.bat, 真正启动的还会是A。
解决办法: 删除掉这个环境变量,或者使用移除了环境变量影响的纯净版 Tomcat。

确定Web应用是否成功启动

虽然Tomcat启动成功了,但是对应的Web应用启动失败,依然会导致404错误。

怎么判断Web应用成功与失败呢? 倘若Web引用启动失败,那么就一定会在Tomcat的logs目录下的 localhost.当前日期.log
里留下错误信息。 打开这个文件,检查对应的Web应用是否启动过程中报错了。
也许是web.xml多写了一个标签结束,也许是对应的servlet类找不到。

webapps下的ROOT目录

有的时候,在server.xml 中配置的<context 是以“/"为开始路径的,与此同时,在webapps目录下还存在一个ROOT目录,这个ROOT目录其实也是告诉tomcat,以“/” 为开始路径,那么这样就发生冲突了,Tomcat只能二选一,通常情况下都会选择ROOT目录,那么在server.xml中配置的<context 就无法启动了,导致访问对应的资源提示404错误。
解决办法就是删除掉ROOT目录,或者把ROOT目录重命名

访问地址的时候是否加了web应用的名称

这个也是常犯的错误,加入部署的时候,指定了路径,比如:

<Context path="/j2ee" docBase="e:\\project\\j2ee\\web" debug="0" reloadable="false" />

那么访问的时候,要记得加上j2ee,像这样:

http://127.0.0.1:8080/j2ee/hello

不能访问WEB-INF目录下的资源

从安全角度出发,TOMCAT不允许访问WEB-INF目录下的HTML,JSP文件。 所以如果你的资源文件放在WEB-INF下,也会提示404错误

访问地址后面多加了一个斜杠

访问地址后面多加了一个斜杠
如图,本来应该访问

http://127.0.0.1:8080/j2ee/login.html

但是却访问了地址:

http://127.0.0.1:8080/j2ee/login.html/

Tomcat持久化异常

Tomcat启动的时候会报一个Exception loading sessions from persistent storage异常,但是又不影响正常的业务。
启动报错:
Tomcat启动的时候会报一个Exception loading sessions from persistent storage异常
该问题的原因是tomcat的session持久化机制引起的,tomcat这个功能本身的用意在于重启tomcat后保存之前的session,Tomcat会把session持久化在%TOMCAT%/work/Catalina/localhost/session.ser 这个文件里。 但是因为tomcat非正常关闭,所以这个文件没有正确地结束(无EOF标记)
解决办法治标: 只需要删除 session.ser文件即可。
解决办法治本:关闭tomcat的持久化功能,就能一劳永逸的解决这个问题。具体为修改conf下的server.xml文件。在项目的context间加入一句代码

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>

重启tomcat以后再也不会报这个错误了。

<Context path="/" docBase="D:\\project\\j2ee\\web" debug="0" reloadable="false" >
    <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"/>
</Context>

纯净版Tomcat

  1. 移除了对换变量中配置的CATALINA_HOME和CATALINE_BASE的依赖,运行startup.bat就一定是启动当前的tomcat。
  2. 删除了webapps里的所有文件夹,避免未删除的ROOT目录与server.xml中的context配置发生冲突可能导致的错误,
    下载

Tomcat 部署

在接下来的课程中有大量的J2EE应用,比如servlet, struts, springmvc,这些 J2EE应用都需要部署在Tomcat里才可以运行。而初学者又特别容易在这一步犯错,所以本文专门示例如何从0开始,正确地部署一个可运行的J2EE应用,包括在过程中会碰到的问题以及对应的解决办法。

下载一个J2EE应用

接下来下载一个J2EE应用来进行测试,本站有很多可以运行的J2EE应用项目可供下载,尽量使用一个简单点的,不用连接数据库的来测试。
第一个servlet 知识点右上角有一个j2ee.rar 可供下载。

部署

下载好j2ee.rar后,解压出来,假设解压到如下目录:

E:\download\j2ee

接着用把 前面下载的 tomcat8080 对应的 conf 目录下的 server.xml文件打开,复制本来被注释掉的

<!--
	<Context path="/" docBase="E:\\project\\j2ee\\web" debug="0" reloadable="false" />
-->

如图所示,把e:\\project\\j2ee\\web 修改为 e:\\download\\j2ee\\web
如果没有把握就下载右上角的server.xml,并覆盖server.xml。
注: 文件路径是双斜杠,不是单斜杠
在这里插入图片描述

重启tomcat,并测试

关闭tomcat, 并重新运行startup.bat。 然后输入如下网址,看到如图所示的截图,即表示部署成功了。

http://127.0.0.1:8080/hello

在这里插入图片描述

1.单个html文件可以直接放在 webapps/ROOT 目录下,启动Tomcat输入对应 xx.html 即可
对于项目:
2.直接解压在 webapps 目录下,访问 localhost:8080/项目名/xx.html
3.修改配置文件 conf/server.xml,添加 <Context path="/" docBase="E:/download/j2ee/web" debug="0" reloadable="false" />
这样项目放在任意位置都可以。访问 localhost:8080/hello
4.不修改配置文件,容易引起不必要的问题。 在 conf/Catalina/localhost 目录下,新建一个 xml 文件,比如叫 j2ee.xml,里面添加一句
这样也可以部署。
访问变成 localhost:8080/j2ee/hello

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值