什么是Tomcat
Tomcat 是Eclipse 用于部署Web应用的服务器
准确的说,Tomcat 只是servlet 的容器
Tomcat 并没有实现JavaEE 的所有标准
Tomcat 是由许多组件构成的
如:Tomcat的JSP引擎Jasper
负责网络连接的Coyote
(下面介绍的Tomcat是基于9.0版本的)
一:Web 应用如何部署
(1)Tomcat 目录下的webapps 目录就是Web应用部署的地方
(2)当Eclipse 运行Web 应用的时候,会把相应的资源文件给放到webapps中
(在Eclipse 中修改文件内容的时候,webapps 目录下的文件也相应被修改)
(当然,Eclipse Workspace 中的文件内容也是同时被修改)
(3)webapps 下有对应文件后,我们则需要运行Tomcat安装目录/bin/startup.bat 启动Tomacat
(4)当Eclipse 运行Web 应用的时候,会自动帮我们运行startup.bat 启动Tomcat
(4)启动Tomcat后,我们就可以在浏览器中,访问我们的Web应用和其他文件资源了
这里给个访问路径的例子,具体不同再修改:
http://localhost:8080/EElearn2/Forward1.html
(默认是8080端口,这个是可以通过配置文件进行修改的)
(5)你可以在webapps 里放文件夹,也可以在里面放打包好的war 包
(Tomcat 默认会帮你把war 包里的东西给解压出来,当然你也可以选择不解压,后面再详细说)
二:用Eclipse 部署和用Tomcat手动部署有什么不同
(1)用Tomcat 手动部署的时候,使用的配置文件在 Tomcat安装目录/conf 下
(2)用Eclipse 部署时,Eclipse 会在Workspace 下新建一个Server 的文件夹
Tomcat的配置文件就在这
(其实是在Server目录下的 xxxconfig 文件夹里
用不同版本的Tomcat文件夹名称会不同,我这就不具体给出了 )
CATALINA_HOME 和 CATALINA_BASE
你双击你Eclipse里的服务器就可以看到相关的信息
其中,Configuration path 就是你Eclipse 对Tomcat的配置文件
下面还会有Sever path 和Deploy path
分别是 catalina.base 和你项目部署的目录(对应Tomcat下的webapps)
关于catalina.base,也就是CATALINA_BASE
简单的说就是Tomcat 的工作目录,下面还会再提及
相信大家肯定还见过CATALINA_HOME
这个对应的是Tomcat 的安装目录
另外呢,你在启动服务器的时候,注意看consle 里输出的信息
你会看到一些配置信息
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE: D:\software\eclipseworkplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: D:\software\apache-tomcat-9.0.31
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\software\eclipseworkplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\software\apache-tomcat-9.0.31
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:\software\apache-tomcat-9.0.31\webapps
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\software\apache-tomcat-9.0.31\endorsed
九月 30, 2020 4:01:21 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=UTF-8
多 留 意 c o n s l e 里 的 信 息 , 报 错 信 息 都 会 在 里 面 , 可 以 帮 助 我 们 有 效 解 决 问 题 \color{red}{多留意consle 里的信息,报错信息都会在里面,可以帮助我们有效解决问题} 多留意consle里的信息,报错信息都会在里面,可以帮助我们有效解决问题
甚至于,如果你手动启动Tomcat遇到问题时,也得依赖Tomcat给出的这些信息
也许黑框框会闪退
但是,这些信息都是会被保存在Tomcat安装目录/logs/catalina.xxxx-xx-xx.log
补充:
logs下的 localhost_access_log.xxxx-xx-xx.txt
会保存用户对服务器的请求信息
例:
这个表示你成功访问了服务器上的一个jsp文件,200是状态码,GET请求
0:0:0:0:0:0:0:1 - - [30/Sep/2020:15:20:18 +0800] “GET /EElearn3/xxtimes.jsp HTTP/1.1” 200 463
这个表示你成功访问了服务器上的一个.ico 图片文件
0:0:0:0:0:0:0:1 - - [30/Sep/2020:16:23:38 +0800] “GET /favicon.ico HTTP/1.1” 200 21630
这样可能会导致一个问题
浏 览 器 按 正 确 路 径 访 问 资 源 , 结 果 报 错 , 无 法 正 确 访 问 \color{red}{浏览器按正确路径访问资源,结果报错,无法正确访问} 浏览器按正确路径访问资源,结果报错,无法正确访问
我们按照webapps 下对应的路径,在浏览器访问资源,结果访问失败
但是,我们用Eclipse 运行Web应用时,却可以正常访问
只是路径名和Web项目名并不对应
下 面 介 绍 什 么 操 作 会 导 致 上 面 的 问 题 \color{blue}{下面介绍什么操作会导致上面的问题} 下面介绍什么操作会导致上面的问题
在你使用Eclipse 对你的project 进行一些不正确重命名操作时,可能会发生错误
例:你已经手动启动Tomcat
然后你在Eclipse 对你的project 进行重命名
再在Eclipse 上运行你的Web应用
这时肯定会报错-----大意是说Tomcat已在运行
这种情况下,你这个重命名操作就可能会导致上面提及的资源访问失败的问题
原因是:
你 上 面 不 正 确 的 重 命 名 操 作 , 会 导 致 E c l i p s e 修 改 资 源 的 映 射 ! \color{blue}{你上面不正确的重命名操作,会导致Eclipse 修改资源的映射!} 你上面不正确的重命名操作,会导致Eclipse修改资源的映射!
资源的映射可以在Eclipse 关于Tomcat的配置文件中修改(上面提过)
这里额外提醒一点
一般情况下,就不要去碰webapps下的东西
很可能会和你用的IDE产生冲突的
而真当冲突发生,然后应用无法正常访问的时候
有一个死马当活马医的办法
把 w e b a p p s 下 的 出 现 问 题 的 应 用 给 删 掉 \color{red}{把webapps下的出现问题的应用给删掉} 把webapps下的出现问题的应用给删掉
Eclipse 会帮我们把应用重新部署一遍
刚发现这原因的时候,我以为这是Eclipse的Bug
但写这个博客的时候,我好像想通了!
Eclipse 这么做,好像是合理的
大 彻 大 悟 \color{green}{大彻大悟} 大彻大悟
一般来说,Eclipse 的使用者没啥必要到webapps 目录下去看具体的文件
你只需要在Eclipse 中写代码,然后Run ,程序只要能正常在服务器上跑,那就没问题
在你一通不正确的骚操作下,这个Web应用还能跑起来,那才是Eclipse 想要的!
Eclipse考虑更多的是用户在各种情况下仍然能正常使用这个软件
三:配置文件
路径:Tomcat安装目录/conf
准确的说,这其实是Catalina 的配置文件
Catalina 是Tomcat 的一个组件,用作severlet 的容器
这里就简单介绍一下我接触过的 server.xml
(1)Host 标签
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
1.name 主机名
2.appBase 就是你部署Web 应用的目录
3.unpackWARs 则是之前说过的是否加压war包
(值为true 解压的话,你可以在解压出来的文件夹里详细了解其结构)
(值为false ,则不解压,但是并不影响正常访问资源)
4.autoDeploy 自动部署,其实叫动态部署会更合适一些 哈哈
设为true 时,表示Tomcat 会动态更新Web应用
也就是,Tomcat 会监听webapps,如果有文件被修改了,则会在服务器上动态更新
(2)Context标签
<Context docBase="Spring02" path="/Spring2"
reloadable="false" source="org.eclipse.jst.jee.server:Spring02"/>
这个就是之前说的有关资源映射的标签
1.docBase 为webapps下实际的资源
2.path 是浏览器访问资源的路径
(/表示在webapps目录)
3.其他的我就没去文档查了,照着填就完了~
有兴趣的朋友可以自己去看看
(有一说一,Tomcat 的文档查起来没那么方便)
四:谁编译的JSP
把JSP 编译成Java文件不是Eclipse 完成的,而是由Tomcat完成的
(准确的说是Tomcat 的 Jasper 2 JSP Engine)
你可以自己做一个简单的实验
在Tomcat 的webapps,新建一个文件夹,新建一个Jsp文件,然后bin/startup.bat 启动Tomcat
当你访问Jsp文件的时候
你就会发现在Tomcat下的work目录里会多出有对应的Java文件和class文件
(整个过程并不依赖Eclipse)
这 里 再 补 充 一 下 J S P 编 译 出 来 的 J a v a 和 c l a s s 文 件 会 被 放 到 哪 \color{blue}{这里再补充一下JSP编译出来的Java和class文件会被放到哪} 这里再补充一下JSP编译出来的Java和class文件会被放到哪
会被放到Tomcat 的工作目录之下
也就是前面提到的CATALINA_BASE
分为两种情况:
(1)手动启动Tomcat:
Tomcat安装目录/work/Catalina/localhost/{Webapp name}/org/apache/jsp
(前面说过,localhost 是可以重命名的,上面的路径供给大家参考)
(2)利用Eclipse 启动:
Workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp/work/…
tmp 可能后面还会带编号,大家灵活处理
work目录后面的路径就和情况(1)一样了
对了,还有要提的就是,你修改JSP文件也是会被Tomcat监听(准确的说是Jasper引擎)到的
然后,Tomcat 会动态编译出新的Java文件和class文件到Tomcat的工作目录
最最最后补充一点
Tomcat 的运行是需要JRE的,所以我们需要配置环境变量JRE_HOME、JAVA_HOME
(Tomcat 是个Java 程序,需要JRE)
如果环境变量,我们就得到startup.bat 里去添加JRE_HOME、JAVA_HOME
JAVA_HOME:JDK的目录
JRE_HOME:JRE的目录
例:
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_221
set JRE_HOME=C:\Program Files\Java\jdk1.8.0_221\jre
(一般情况下,JRE是在JDK目录之下的)
Tomcat is a web server also developed by the Apache Software Foundation, thus its official name is Apache Tomcat.
Apache Software Foundation (ASF)
更像是一个在服务器上运行的程序
Although we call Apache a web server, it is not a physical server, but rather a software that runs on a server. Its job is to establish a connection between a server and the browsers of website visitors (Firefox, Google Chrome, Safari, etc.) while delivering files back and forth between them (client-server structure). Apache is a cross-platform software, therefore it works on both Unix and Windows servers.