博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat 与 Eclipse
阅读量:2207 次
发布时间:2019-05-04

本文共 6156 字,大约阅读时间需要 20 分钟。

什么是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 标签

1.name 主机名

2.appBase 就是你部署Web 应用的目录

3.unpackWARs 则是之前说过的是否加压war包

(值为true 解压的话,你可以在解压出来的文件夹里详细了解其结构)

(值为false ,则不解压,但是并不影响正常访问资源)

4.autoDeploy 自动部署,其实叫动态部署会更合适一些 哈哈

设为true 时,表示Tomcat 会动态更新Web应用

也就是,Tomcat 会监听webapps,如果有文件被修改了,则会在服务器上动态更新

(2)Context标签

这个就是之前说的有关资源映射的标签

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文件会被放到哪} JSPJavaclass

会被放到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.

转载地址:http://goiyb.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>