草庐IT

Tomcat 介绍及使用教程

贺haha 2023-03-28 原文

镜像下载、域名解析、时间同步请点击 阿里云开源镜像站

1. Tomcat 介绍

Apache Tomcat 是由 Apache Software Foundation(ASF)开发的一个开源 Java WEB 应用服务器。

由于 Tomcat 是由 Java 语言实现的,因此需要运行在 Java 虚拟机上,所以使用前要先安装 JDK,以提供运行环境

Tomcat 实现了几个 Java EE 规范,包括 Java Servlet、Java Server Pages(JSP)、Java Expression Language 和 Java WebSocket 等。在下载好 Tomcat 后,可以在它的 lib 目录中看到相关的 Java EE 规范 API 源码的引用

Tomcat 实现的几个 Java EE 规范中,有一个很重要的规范 Servlet,通过它我们可以运行自己编写的 Servlet 应用程序处理动态请求,即实现动态页面

Tomcat 的 Connector 组件实现了 HTTP 请求的解析,可以把 Tomcat 看作是一个 HTTP 服务器,Tomcat 可以通过 Connector 组件接收 HTTP 请求并解析,然后把解析后的信息交给 Servlet 处理:

  • 对于静态资源(html/css/js 等)请求:Tomcat 提供默认的 Servlet 来处理响应
  • 对于动态请求:可以映射到自己编写的 Servlet 应用程序来处理

2. 下载安装

这里以 Tomcat 8 为例,在 Linux 系统中演示下载安装 Tomcat 的方法。

注意: 由于 Tomcat 运行在 Java 虚拟机上,因此在安装 Tomcat 之前要先下载好 JDK

2.1 Linux 中安装

cd /opt

通过 wget 方式来下载 Tomcat 的安装包

wget https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.77/bin/apache-tomcat-8.5.77.tar.gz

将下载的 Tomcat 压缩包进行解压

tar xzf apache-tomcat-8.5.77.tar.gz

之后通过 startup.sh 运行 Tomcat 服务器

/opt/apache-tomcat-8.5.77/bin/startup.sh

2.2 访问 Tomcat

当我们运行 Tomcat 之后,就可以在浏览器中通过 服务器IP端口号 来进行访问。

如果你是使用的服务器,那么 IP 地址就为服务器的公网 IP
如果你是使用的自己的主机,那么 IP 地址就为 127.0.0.1
Tomcat 的默认端口号为 8080(可以在 conf 目录中手动修改)

注意: 如果你想要访问其他人的 Tomcat,要么他人 Tomcat 使用的是外网 IP,要么你和他的外网必须相同,即在同一局域网下。只有这两种情况你才能访问到他人的 Tomcat,否则就访问不了

当前我们使用的 IP 协议是 IPv4,这个协议下的 IP 地址是一个32位、4个字节的整数,由于该数字并不大,但是全世界联网的设备已经超过了这个数字,因此想要每台主机都有一个独立的 IP 地址是不够的。

因此就采用了 NAT 机制,即多台主机使用一个外网 IP,外网是不同重复的,并且每个相同的外网下的不同主机都有自己独自的内网 IP。如此一来,就很好的解决了 IP 地址不够的问题。

3. Tomcat 的目录结构

当安装好 Tomcat 后,打开它的文件夹,可以看到以下目录

  • bin: 存放各种启动、关闭和其它程序的脚本(.sh 文件是针对 Unix 系统使用的,.bat 文件是针对 Windows 系统使用的,* 相同的程序的功能是一样的)

  • conf: 配置文件及相关数据文件存放的目录,如存放 server.xml、tomcat-users.xml、web.xml

  • lib: Tomcat 使用的库文件存放的目录,如存放 Servlet 规范的 API

  • logs: 默认日志文件存放的目录,如存放访问日志(可以通过 server.xml 文件将日志配置到其它目录)

  • temp: 临时文件的工作目录,如上传大文件时的缓存数据会存储在这里

  • webapps: 存放 web 应用、用来程序部署的目录(可以通过 server.xml 文件配置)

一个具有独立完整功能的网站,可以称为一个 web 应用。一个 Tomcat 的服务器上可以同时部署多个这样的 web 应用。这些 web 应用以目录的形式被存放到 webapps 目录中

  • work: Tomcat 的工作目录,如存放 JSP 编译后的类文件

4. Tomcat 的配置文件

在 Tomcat 的 conf 目录中,存放了 Tomcat 的配置文件,打开该目录,可以看到主要有以下几个配置文件

  • catalina.policy: 当基于 -securty 选项启动 Tomcat 实例时会读取此配置文件。此文件是 Java 的安全策略配置文件,用于配置访问 codebase(代码库)或某些 Java 类的权限
  • catalina.properties: Java 属性定义文件,设定类加载器路径、安全包列表和一些调整性能的参数信息
  • context.xml: 为部署与此 Tomcat 实例上的 web 应用程序提供的默认配置文件,每个 webapp 都可以使用独有的 context.xml,通常放置于 webapp 目录的 META-INF 子目录中,常用于定义会话管理器,Realm 和 JDBC 等
  • logging.properties: 定义日志相关的配置信息,如日志级别、文件路径等
  • server.xml: Tomcat 核心配置文件,包含 Service、Connector、Engine、Realm、Valve、Hosts 主组件的相关配置信息
  • tomcat-users.xml: 包含 Realm 认证时用到的相关角色、用户和密码等信息;Tomcat 自带的 manager 默认情况下会用到此文件;在 Tomcat 中添加火删除用户,为用户指定角色等将通过编辑此文件实现
  • web.xml: 为部署与 Tomcat 实例上的所有 web 应用程序提供部署描述符,通常用于为 webapp 提供默认的 servlet 定义和基本的 MUIME 映射表

5. WEB 应用部署目录结构

部署应用程序时,一般会将其打包成一个 war 包,然后放到 Tomcat 的应用程序部署目录 webapps 中。而 web 应用程序有特定的组织格式,是一种层次型目录结构,通常包含了 servlet 代码文件、HTML、JSP 页面文件、类文件、部署描述符文件等等,相关说明如下:

  • /: 表示 web 应用程序的根目录,可以存放 HTML、JSP 页面以及其他客户端浏览器必须可见的其他文件(如 JS、CSS、图像文件)。在较大的应用程序中,还可以选择将这些文件划分为子目录层次结构

  • /WEB-INF: 表示 web 应用程序的所有私有资源目录,用户浏览器不可能访问到的,通常 web.xml 和 context.xml 均放置于此目录。

  • /WEB-INF/web.xml: 表示 web 应用程序的私有的部署描述符,描述组成应用程序的 servlet 和其他组件(如 filter),以及相关初始化参数和容器管理的安全性约束。

  • /WEB-INF/classes: 表示 web 应用程序自有的 Java 程序类文件及相关资源存放目录。

  • /WEB-INF/lib: 表示 web 应用程序自有的 JAR 文件,其中包含应用程序所需的 Java 类文件及相关资源(如第三方类库或 JDBC 驱动程序)

6. 部署静态页面

什么是静态页面?

静态页面就是内容始终固定的页面,即使用户不同、时间不同、输入的参数不同,页面内容也不会发生变化。除非网站的开发人员修改源代码,否则页面的内容始终不变。

6.1 部署单个 HTML

可以将自己写好的单个 HTML 部署到 Tomcat 中,方法如下:

  • 先创建好 html 文件(hello.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>将 HTML 部署到 Tomcat 上</title>
</head>
<body>
    <div>hello</div>
</body>
</html>
  • 将创建好的 html 文件拷贝到 Tomcat 的 webapps/Root 目录中

启动 Tomcat,在浏览器的网址栏输入 127.0.0.1:8080/hello.html 就可以访问到刚刚部署的 HTML

6.2 部署带有 CSS、JavaScript、图片的 HTML

实际开发中,HTML 可能不仅仅是单一文件,还会依赖一些其它资源,如 CSS、JavaScript、图片等等。

可以将自己写好的带有 CSS、JavaScript 或图片的 HTML 部署到 Tomcat 中,方法如下:

  • 创建好 html 文件(hello.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>将 HTML 部署到 Tomcat 上</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <img src="弥豆子.jpg" alt="弥豆子">
    <script src="app.js"></script>
</body>
</html>
  • 创建好 css 文件(style.css)
img {
    width: 500px;
    height: 300px;
  • 创建好 js 文件(app.js)
console.log("hello");
  • 准备好图片(弥豆子.jpg)

  • 将以上几个文件都拷贝到 Tomcat 的 webapps/ROOT 目录中

  • 启动服务器,在浏览器的网址栏输入 127.0.0.1:8080/hello.html 就可以访问到刚刚部署的 HTML

6.3 部署 HTML 到单独的目录中

实际开发中,HTML 文件可能不止一个,依赖的资源也比较多,很杂乱。因此直接全部拷贝到 webapps/ROOT 目录中就不太合适。

可以创建一个单独的目录,和 ROOT 目录并列,来存放我们要部署到 Tomcat 中的内容,方法如下:

  • 在 webapps 目录中创建一个新的文件夹(这里为 HelloApp),并在该文件中,将 HTML 的依赖再通过创建新的目录来进行合理的分类(如 css、js、img 等)

  • 将 6.2 中的那些文件全部拷贝到该文件中,并按照新建的目录进行分类(注意:可能要调整一些资源的路径)

  • 启动 Tomcat,在浏览器的网址栏输入 127.0.0.1:8080/HelloApp/hello.html 就可以访问到刚刚部署的 HTML

6.4 部署博客系统页面

这里就以这个博客系统的页面为例,将其部署到 Tomcat 上

  • 首先在 webapps 目录下创建一个目录(这里为 blog)

  • 将写的博客系统页面的文件拷贝进来

  • 启动 Tomcat,在浏览器的网址栏输入 127.0.0.1:8080/blog/blog_list.html 就可以访问到刚刚部署的博客系统

6.5 部署博客系统到云服务器

上面已经介绍了如何将 HTML 文件等 web 程序部署到本地的 Tomcat 上,但是仅仅如此,其他人是无法访问到这些页面的。

因此,可以将 web 程序部署到云服务器的 Tomcat 的 webapps 目录中,这样你部署的程序其他人也可以看到。方式如下:

  • 首先将你要部署的程序的目录打一个 zip 压缩包(这里以上述博客系统页面为例)

  • 通过 xshell 连接上云服务器,并切换到 Tomcat 的 webapps 目录中

  • 将 blog.zip 拖拽到 xshell 中(也可以使用其它方式,如使用 xftp)

  • 拖拽成功后,将 blog.zip 进行解压缩
unzip. blog.zip

  • 最后在浏览器中的网址栏搜索 http://:8080/blog/blog_list.html 就可以访问到该页面,大家也可以访问到的!

本文转自:https://blog.csdn.net/weixin_51367845/article/details/123429050

有关Tomcat 介绍及使用教程的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐