什么是tomcat, tomcat该如何使用?(java)

news2024/11/15 5:50:58

 tomcat是什么?

        tomcat翻译过来为汤姆猫, 但是他可不是猫和老鼠中的汤姆, 而是java中的tom, 虽然java中的tomcat没有猫和老鼠那么出名, 但是他仍然是java中的中流砥柱

 下图为java中的tomcat, 也就是最右边这个黄色的猫:

        Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为比较流行的Web 应用服务器。

        Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当公司运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。Tomcat最新版本为10.0.23。

名称由来:

        Tomcat最初是由Sun的软件架构师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O'Reilly都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(英语公猫或其他雄性猫科动物)。而O'Reilly出版的介绍Tomcat的书籍(ISBN 0-596-00318-8)[1]的封面也被设计成了一个公猫的形象。而Tomcat的Logo兼吉祥物也被设计为一只公猫。

 下载安装

        直接在tomcat官网下载即可, Tomcat版本很多, 我们以Tomcat 8 为例子:

tomcat官网:

  • 百度搜索tomcat:

  • Apache Tomcat® - Welcome! (除了百度之外还可以直接访问tomcat官网)icon-default.png?t=N7T8https://tomcat.apache.org/

下载:

tomcat官网主页

下载

 

选择zip下载压缩包(记得一定要放在自己找得到的位置, 后面会用到) 

 

tomcat目录结构 

        解压后的目录: 

解释如下:

  • bin : 存放各种启动停止脚本的文件(.sh后缀的文件是以后再linux上使用的文件, .bat文件是在windows上使用的)
  • conf : 相关配置文件, 目前我们不需要担心
  • lib : 运行tomcat需要的类库
  • logs : 运行是的日志文件, 可以通过这个日志文件来定位一些问题
  • temp : 临时文件夹
  • webapps : 来存放我们需要运行的web application的文件夹, 是一个非常常用的文件夹
  • work : tomcat内部进行预编译的文件夹

这个里面最重要的文件夹就是webapps文件夹, webapps是web applications的简称, 意思是用来存放web应用文件夹.

什么是web应用?
一个具有独立完整功能的"网站", 我们就可以称为一个web应用

例如 搜狗搜索 实现了独立完整的"搜索引擎功能", 淘宝网实现了独立完整的"电商功能"

一个tomcat服务器上是可以同时部署多个web应用,这些web应用以目录的形式被放到webapps目录中

 进入webapps目录:

每个文件夹都对应着一个 web 应用, 可以在浏览器中分别访问每个 web 应用

启动服务器

        在bin目录中, 双击start.bat 即可启动tomcat服务器

 看到如下内容的日志说明启动成功

 但是我们发现里面还存在很多乱码

为什么会出现乱码?
在windows8上通过cmd启动tomcat会出现乱码, 但是不会影响tomcat的使用, 原因是tomcat默认是utf-8的编码方式, 而windows的cmd是默认gbk编码的

在浏览器中输入127.0.0.1:8080 即可看到Tomcat的欢迎页面

tomcat欢迎页

 启动失败???

最常见的启动失败的原因就是端口号被占用, tomcat启动的时候会默认绑定8080和8005端口, 如果有进程占用了这两个其中的任意一个, 都会导致tomcat启动失败, 可以在命令行中使用:
netstat -ano | finder 8080 来确定8080这个端口是否被其他进程占用, 把占用的进程干掉, 重启taomcat就可以解决问题

如下, 说明8080这个端口被占用, 然后在任务管理器里面干掉这个进程

部署静态页面

什么是"静态"?

         静态页面也就是内容始终是固定的页面, 及时用户不同, 时间不同, 或者是输入的参数不同,页面也不会发生变化(除非网站的开发人员修改代码)

        例如: tomcat的主页就是一个静态页面

https://tomcat.apache.org/icon-default.png?t=N7T8https://tomcat.apache.org/

而b站的主页则是一个动态页面, 每次进入b站的时候, 他都会给你推送不同的视频内容哔哩哔哩 (゜-゜)つロ 干杯~-bilibili哔哩哔哩(bilibili.com)是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。大家可以在这里找到许多欢乐。icon-default.png?t=N7T8https://www.bilibili.com/

部署单个HTML页面 

        可以把写好的HTML页面部署到Tomcat中 

1. 创建html页面, 内容为一个hello

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0,
maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>hello</title>
</head>
<body>
    <div>hello</div>
</body>
</html>

2. 把hello.html拷贝到tomcat的webapps里面

3. 点击startup.bat(windows) 或者 startup.sh(linux)

4. 然后在浏览器中输入url来访问: http://127.0.0.1:8080/hello.html

 

注意: 127.0.0.1 为本地环回 IP, 表示当前主机. 此时同学们无法通过这个 IP 访问到老师电脑上的页面
 

部署带有CSS / JavaScript / 图片的HTML

        因为我们实际的开发不可能仅仅只有一个html文件,  还需要依赖一些其他资源, 例如CSS/JS/图片等等, 这些资源也要一起部署过去, 那该如何部署呢??

1. 创建html文件: hello2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>静态页面</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <img src="doge.jpg" alt="">
    <script src="app.js"></script>
</body>
</html>

 2. 创建 style.css

img {
width: 500px;
height: 500px;
}

3. 创建 app.js

console.log("hello");

4. 准备一个 doge.jpg

5. 把上面四个文件都拷贝到tomcat 的webapps/ROOT中.

 6. 访问, 通过http://127.0.0.1:8080/hello2.html 来访问页面

 7. 通过fiddler抓包可以发现浏览器和服务器之间有4个http请求和响应的交互

  • 在浏览器地址栏里输入 http://127.0.0.1:8080/hello2.html 会触发一次 GET 请求. 这个请求会拿到 hello2.html 的内容.
  • 浏览器解析 hello2.html, 其中的 link 标签, img 标签, script 标签都会分别触发一次 GET 请求. 请求的 路径 分别为 /style.css , /doge.jpg , /app.js

 部署html到单独的目录中

        实际开发中的html页面不止一个, 依赖的css/js文件也可能比较多, 这个时候就不适合全部拷贝到webapps/ ROOT目录中了, 因为文件比较多的时候, 就会显得非常慢.

        我们可以创建一个单独的目录, 和ROOT并列, 来存放我们要部署的内容.

1. 在webapps中创建目录HelloApp目录

 2. 把刚才创建的四个文件hello2.html, style.css, doge.jpg, app.js拷贝到这个HelloApp.

3. 在浏览器中通过http://127.0.0.1:8080/HelloApp/hello2.html

4.通过抓包可以看到, 浏览器和服务器之间同样是 4 次 HTTP 请求/响应 的交互.

 部署到云服务器

   利用上面的这个yum安装tomcat也是可以的,只不过yum安装的tomcat版本比较旧,所以更好的方法还是手动安装tomcat。

        tomcat本身安装就很容易。 

        但是一定要保证jdk安装好了之后才能去安装tomcat,因为tomcat也是java写的程序 。

        此外我们使用的centOS7对应的tomcat版本(7.0版本)是比较老的,如果我们现在使用的tomcat是7的话,就和我们的servelt版本不搭配,此处下载了7版本也就servlet也要换,就比较麻烦,所以我们直接在tomcat官网下载tomcat8

选择download里面的tomcat8

 然后找到里面的:

        我们以前在win系统上也是在这个core这里下载的,这里需要注意的是,tomcat是跨平台的。所以我们还是下载这个压缩包即可(.zip文件)。

        然后把下载好的文件上传到linux系统即可。

        如何上传? 首先在linux中进入到tomcat将要存放的目录,然后直接在win窗口中的资源管理器中,将对应的tomcat文件直接拖拽然至linux窗口即可。

        当然这个功能只支持xshell和其他终端的zmode功能

        如果xshell拖拽之后还是无法上传文件,那么就需要现在linux里面使用yum来安装lrzsz

yum install lrzsz

  • rz 是把文件从windows上传给linux
  • sz是把文件从linux传给windows
  • 直接拖拽释放文件就是自动执行了rz

        如果你是上传的.zip压缩包,还需要对其进行解压缩。

        直接unzip 压缩包名即可:

unzip zipFile.zip 

        同时unzip找不到的话,也是可以通过yum install unzip即可。 

         解压之后还没完,还需要将tomcat的启动脚本加上可执行权限:

进入tomcat的目录如下:

其中bin目录中就有启动脚本。

        其中里面有很多文件就是给linux使用的(.sh后缀的文件就是给linux使用的脚本,但是一般这些脚本在linux中没有启动权限,需要先赋予权限) 

         下面的操作是给予权限的过程:

  1. 进入到tomcat的bin目录,在tomcat目录里面使用cd bin
  2. 然后使用命令:chmod + x *.sh
  3. 使用命令之后没有提示即给予权限成功
  4. 执行成功之后,这个里面的.sh文件就全都变成绿色的了(参考图1)
  5. 就可以启动tomcat 了,但是得先检查tomcat的端口是否被占用了,tomcat的默认 端口为8080和8005: netstat -anp | grep 8080:

    netsat -anp | grep 8005:

    所以说明这两端口是空闲的。
  6. 启动tomcat:sh startup.sh
  7. 检查tomcat的运行状态:netstat -anp | grep 8080:

    ps aux | grep tomcat:
  8. 启动成功了
  9. 外网访问 tomcat 默认 demo

在浏览器地址栏中
http : //[ 服务器外网 ip]:8080/

在外网访问这个页面之前需要先开启服务器的 " 安全组 " 功能 .
登陆自己的云服务账户 , 在主页中找到 控制台 -> 自己的服务器 -> 安全组
需要配置安全组 , 允许外部主机访问服务器的 8080 端口 .
备注 : 安全组配置界面如果找不到 , 可以随时咨询云服务器客服 .
(1) 选择加入安全组
(2) 选择新建安全组
(3) 点击新建按钮
(4) 选择安全组的模板 , 推荐使用第二个模板

(5)在任意一行规则的地方, 点击插入, 新增一行安全组规则即可 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1227612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI绘画使用Stable Diffusion(SDXL)绘制三星堆风格的图片

一、前言 三星堆文化是一种古老的中国文化&#xff0c;它以其精湛的青铜铸造技术闻名&#xff0c;出土文物中最著名的包括青铜面具、青铜人像、金杖、玉器等。这些文物具有独特的艺术风格&#xff0c;显示了高度的工艺水平和复杂的社会结构。 青铜面具的巨大眼睛和突出的颧骨&a…

【洛谷 B2002】Hello,World!(顺序结构)

Hello,World! 题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 输出格式 样例 #1 样例输入 #1 无样例输出 #1 Hello,World!思路 #include 是一个预处…

MyBatis 快速入门

MyBatis 快速入门 前言什么是 MyBatis简介核心特性使用示例配置文件Mapper 接口SQL 映射文件使用 MyBatis 如果大家对以上的导读很懵怎么办&#xff01;没关系 往下阅读&#xff01; 1. MyBatis 介绍1.1. 什么是MyBatis1.2. 持久层1.3. 框架1.4. JDBC 弊端1.5.…

有成效的工作

从开始上班起&#xff0c;听到过工作是做不完得。 大概的意思&#xff0c;现在的工作做完了&#xff0c;就会分配新的工作。所以总也做不完。 如果是做不完的&#xff0c;那么是不是在一个岗位上就一直干着呢。既然这个很难成立。那其实工作是可以干得完的。 一个岗位的终结&am…

redis+python 建立免费http-ip代理池;验证+留接口

前言: 效果图: 对于网络上的一些免费代理ip,http的有效性还是不错的;但是,https的可谓是凤毛菱角; 正巧,有一个web可以用http访问,于是我就想到不如直接拿着免费的HTTP代理去做这个! 思路: 1.单页获取ipporttime (获取time主要是为了后面使用的时候,依照时效可以做文章) 2.整…

矩阵运算_矩阵的协方差矩阵/两个矩阵的协方差矩阵_求解详细步骤示例

1. 协方差矩阵定义 在统计学中&#xff0c;方差是用来度量单个随机变量的离散程度&#xff0c;而协方差则一般用来刻画两个随机变量的相似程度。 参考&#xff1a; 带你了解什么是Covariance Matrix协方差矩阵 - 知乎 2. 协方差矩阵计算过程 将输入数据A进行中心化处理得到A…

马斯克的SpaceX星舰又炸了!发射不久后失联自毁

就在几小时前&#xff0c;马斯克旗下SpaceX 发射了有史以来最强大的星舰&#xff0c;但在发射后不久发生爆炸。 在这次发射尝试中&#xff0c;星舰一二级成功进行了分离&#xff0c;但二级助推器和星舰都发生了快速意料之外的解体。在发射半小时后&#xff0c;SpaceX 宣布二级自…

7个最佳开源免费库存/仓库管理系统(WMS)

库存/仓库管理软件是一种用于帮助企业管理库存、仓储位置和交付过程的软件系统。这种类型的软件对于拥有大量库存和多个仓库的企业非常有用。 库存/仓库管理软件的作用包括以下几个方面&#xff1a; &#xff08;1&#xff09;减少库存节约成本 通过跟踪库存水平和存储位置&…

从零开始:Rust环境搭建指南

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将一起探讨如何从零开始搭建Rust开发环境。 Rust环境搭建概览 Rust是一种系统编程语言&#xff0c;以其安全性、并发性和性能闻名。搭建Rust环境是学习和使用这一语言的第一步。 第一步&#xff1a;安装Rust Rust的…

二维码智慧门牌管理系统升级解决方案:查询功能大提升,让地址查找变得轻松便捷!

文章目录 前言一、支持地址名称、小区等信息进行模糊查询二、支持地图上绘制多边形、圆形、矩形进行范围查询三、高效的数据处理能力&#xff0c;保证查询速度四、灵活的应用场景&#xff0c;满足多种需求 前言 随着科技的快速发展和城市化的加速推进&#xff0c;传统的门牌管…

六.Linux远程登录

1.说明&#xff1a;公司开发的时候&#xff0c;具体的应用场景是这样的 1.linux服务器是开发小组共享 2.正式上线的项目是运行在公网 3.因此程序员需要远程登录到Linux进行项目管理或者开发 4.画出简单的网络拓扑示意图(帮助理解) 5.远程登录客户端有Xshell6、Xftp6&#xff0…

MyISAM和innoDB两种引擎的对比

innoDB 3.23就有了innoDB引擎&#xff0c;5.5成为了默认引擎&#xff0c;支持外键 是一种事务型引擎&#xff0c;可以保证完整提交和回滚 更新、删除比较多的场景&#xff0c;推荐使用innoDB 不过innoDB对内存要求高&#xff0c;因为索引和数据存到一个表了&#xff1b;写操作…

7.22 SpringBoot项目实战【收藏 和 取消收藏】

文章目录 前言一、编写控制器二、编写服务层三、Postman测试最后前言 本系统还支持 收藏图书,就是对心仪的书加一下收藏,大家都懂,这是一个很常见的功能。 那么我们来看看怎么来做,先分析一下:【一个人】对【一本书】只需【收藏一次】,但可以【收藏N本】不同的书,收藏…

数据结构之链表练习与习题详细解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.习题解…

【LeetCode刷题-树】--654.最大二叉树

654.最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 1.创建一个根节点&#xff0c;其值为 nums 中的最大值。 2.递归地在最大值 左边 的 子数组前缀上 构建左子树。 3.递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回…

庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片

文章目录 Pre概述缓冲区分配和包装 &#xff08;allocate 、 wrap&#xff09;缓冲区分片 (slice)缓冲区份片和数据共享只读缓冲区 &#xff08;asReadOnlyBuffer&#xff09;直接和间接缓冲区内存映射文件 I/O将文件映射到内存 Pre 庖丁解牛&#xff1a;NIO核心概念与机制详解…

开源供应链管理系统 S2B2B2C系统方案及源码输出

这个开源供应链管理系统提供针对企业供应链管理需求的开放源代码解决方案。通过开源供应链管理系统&#xff0c;企业能够实现对供应商、进销存和物流配送等方面的全面管理和优化&#xff0c;涵盖了从供应商选择到门店到消费者服务交付的整个流程。开源系统使企业能够根据自身需…

ssm+vue的高校疫情防控管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校疫情防控管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

Network(四)NAT实现方式与VRRP概述

一 NAT 1 NAT概述 &#xff08;1&#xff09;NAT的作用 Network Address Translation&#xff0c;网络地址转换 通过将内部网络的私有IP地址转换成全球唯一的公网IP地址使内部网络可以连接到互联网。 &#xff08;2&#xff09;私有IP地址分类 A类10.0.0.0~10.255.255.…

【LeetCode刷题-树】--998.最大二叉树II

998.最大二叉树II /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …