【Java Web】Tomcat 快速入门

news2025/1/19 3:22:07

通常,为了让 Java 开发的应用程序(app)能够在服务器上正常运行,必须安装 Java 运行时环境(JRE)。JRE 主要支持 Java SE,而如果要运行 Java EE 应用,则需要更多的支持,比如依赖于服务器软件,Tomcat 就是其中一种常用的服务器。

有了 Tomcat 之后,由于它本身也是用 Java 实现的,因此同样需要 JRE 来运行。之前看 Java Web 教程,觉得有一个比喻可以帮助理解应用程序、Tomcat 以及 JRE 三者的关系:将 Java 开发的应用程序比作子弹,而 Tomcat 则是枪。子弹需要符合枪的规范,并装入枪中才能发射。然而,仅有枪并不意味着可以随时使用,还需要在靶场上才能操作,而 JRE 就可以理解为这个靶场。

Tomcat 是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、sun 和其他一些公司及个人共同开发而成。最新的 Serviet 和 JSP 规范总是能在 Tomcat 中得到体现。Tomcat 是目前比较流行的 web 应用服务器。

Tomcat 安装

在 Tomcat 官网左侧 Download 模块选择对应版本的 Tomcat 进行下载。这里选择 64-bit Windows 版本的压缩包进行下载,下载完成后,选择一个合适的文件夹进行解压,即可使用:

在这里插入图片描述

需要注意的是,在 Tomcat 的 10 以及之后的版本中,由于包名由原先的 javax.* 改成 jakarta.*,因此,原先可以运行在之前版本的应用程序,需要修改包名才能运行在 10 版本以及之后的 Tomcat 上。另外,下载 Tomcat 时需要确认支持的 Java 版本:

在这里插入图片描述

Tomcat 服务启动:进入 apache-tomcat 目录下的 bin 文件夹,找到 startup 命令。如果是在 Windows 操作系统,则选择运行 startup.bat,如果是在 Linux 系统,则选择运行 startup.sh。这里以 Windows 系统为例,双击startup.bat,出现一个控制台窗口,里面打印着启动的日志,这时可以打开浏览器输入:http://localhost:8080/,当出现以下页面时,说明启动成功:

在这里插入图片描述

Tomcat 服务关闭:可以直接关闭启动时出现的控制台窗口,也可以运行 shutdown 命令,比如在 Windows 系统中,双击 bin 目录中的 shutdown.bat 即可关闭 Tomcat 服务。

解决Tomcat 打印日志中文乱码:在 conf 目录下找到 logging.properties 文件,打开后找到控制台的字符集设置,将 UTF-8 改成 GBK,之后,重新启动 Tomcat 服务即可:

java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK
# java.util.logging.ConsoleHandler.encoding = UTF-8

Tomcat 常见目录

(1)bin 目录

该目录用于存放 Tomcat 相关命令,比如 startup、shutdown 等命令。

(2)conf 目录

该目录用于存放配置文件,比如:1)配置 Tomcat 服务占用的端口号,可以修改 conf 下的 server.xml 配置文件内容;2)设置 Tomcat 启动控制台字符集,防止日志乱码,可以修改 logging.properities 中控制台处的字符集设置。

(3)lib 目录

该目录用于存放 Tomcat 程序的相关 jar 包。可以将部署在 Tomcat 上项目所需的 jar 包存放在 lib 文件夹中,但不建议这样做,会污染环境。

(4)logs 目录

该目录用于存放 Tomcat 启动后记录的日志。Tomcat 使用久会产生较多日志,建议定期清理不必要的日志信息,避免堆积。

(5)temp 目录

该目录用于存放临时文件,不是很重要,无需多关注

(6)webapps 目录

该目录用于存放需要部署的项目,webapps 文件夹中本身自带了一些项目,这些项目可以删除。

(7)work 目录

该目录用于存放与 jsp 技术相关的文件。由于目前 jsp 技术过时了,因此,这个 work 目录可以不关注。

WEB 项目标准结构

在使用 Tomcat 的过程中,一个标准的可以用于发布的 WEB 项目标准结构如下:

在这里插入图片描述

  • static:非必要目录,约定俗成的名字,一般在此处放静态资源(css js img)

  • WEB-INF:必要目录,必须叫 WEB-INF,受保护的资源目录,浏览器通过 url 不可以直接访问的目,存放项目相关的重要文件:

    • classes:项目字节码根路径
    • lib:存放项目所需的第三方 jar 包
    • web.xml:当前项目的配置文件

url 的组成部分和项目中资源的对应关系如下:

在这里插入图片描述

Tomcat 部署项目

使用 Tomcat 部署项目,有三种方式:

  • 直接将编译好的项目放在 webapps 目录下

  • 将编译好的项目打成 war 包放在 webapps 目录下,Tomcat 启动后会自动解压 war 包

  • 可以将项目放在非 webapps 的其他目录下,在 Tomcat 中通过配置文件指向 app 的实际磁盘路径

对于第三种部署方式,首先在磁盘的自定义目录准备一个部署项目,这里以名称为 app 的项目为例。之后,在 Tomcat 的 conf 文件夹下创建 Catalina/localhost 目录,并在该目录下创建一个 app.xml 文件(该文件与项目名同名),文件内容为:

<!--
    path:项目的访问路径,也是项目的上下文路径,即浏览器中输入的项目名称
    docBase:项目在磁盘中的实际路径
-->

<Context path="/app" docBase="D:\webapps\app">

其中,path 参数表示是项目的访问路径,也是项目的上下文路径,即浏览器中输入的项目名称;docBase 参数表示项目在磁盘中的实际路径。注意: path 、xml 文件名称以及项目名称尽量保持一致,否则需要额外的配置。之后,即可启动 Tomcat 访问项目。

IDEA 关联 Tomcat

在部署 JavaWeb 工程时,首先需要将该工程构建成可以用于 Tomcat 服务器部署的应用程序,之后才能将这个应用程序真正部署到 Tomcat 服务器上。这个过程可以使用 IDEA 进行。

(1)建立 Tomcat 和 IDEA 关联

打开 IDEA 应用,在 Settings 中找到 Build, Execution, Deployment 模块,找到 Application Servers 选项,添加一个 Tomcat Server:

在这里插入图片描述

注意:Tomcat Home 地址选到 Tomcat bin 目录的上一层,之后点击 OK 即可。

(2)使用 IDEA 创建和开发 JavaWeb 工程

在自定义路径下创建一个项目文件夹,这里以 web-all 命名项目文件夹,并用 IDEA 打开这个空项目。在创建 JavaWeb 工程之前,首先点击导航栏处的 File 的 Project Structure 选项,设置 JDK 和Java 的版本,同时设置构建好的应用程序的输出路径:

在这里插入图片描述

注意,这里是为了便于将多个开发项目放在同一个文件夹中管理,才先创建一个 web-all 项目。所以,接着是通过new Module 创建具体需要开发的项目。右键项目,选择 new 新的 Module(这里演示的项目 Build systems 选择 IntelliJ):

在这里插入图片描述

之后需要将这个普通项目转成一个 Java Web 项目。不过,在此之前,需要为项目添加 Tomcat 运行依赖和 Web 组件。点击导航栏处的 File 的 Project Structure 选项,选择当前 Modules 的 Dependencies,添加 Tomcat 依赖。点击 + 选择 Library... 中对应版本的 Tomcat 依赖:

在这里插入图片描述

接着,添加 Web 资源组件。右键项目,选择 Add Framework Support...,勾选 Web Application,选择 5.0 版本(4.0 版本无法在 Tomcat 10 中运行):

在这里插入图片描述

此时,可以看到项目目录下多了一个 web 文件夹,说明目前这个项目已经不再是普通项目,而是一个 Java Web 项目。根据常见的开发项目目录结构,为这个项目创建一些测试代码:

在这里插入图片描述

(3)将工程构建成可部署的应用程序

在开发好当前工程后,需要将当前工程转成一个应用程序。点击 IDEA 导航栏中的 Build 下面的 Build Artifacts,选择当前工程点击 Build。完成后会生成一个 out 文件夹,该文件夹的 artifacts 中有一个 工程名称_war_exploded 的应用程序,这个应用程序即为转化后的输出。当然这一步其实可以省略,直接进行下面的 Tomcat 配置,最终在运行项目时,会自动转换和生成。接着进行 Tomcat 项目部署配置。点击编辑 Run/Debug Configurations:

在这里插入图片描述

添加一个 Tomcat Server Local:

在这里插入图片描述

选择当前版本的 Tomcat 作为 Application Server,点击 Deployment,将当前转换好的应用程序添加进去,这里可以将 Application context 设置成一个较短的名称,这样使用浏览器访问项目的路径会简洁一些:

在这里插入图片描述

(4)将应用程序部署到 Tomcat 并启动运行

配置完成后,点击 IDEA 中的运行项目按钮即可启动 Tomcat 并在 Tomcat 上运行项目。

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

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

相关文章

RabbitMQ延迟消息的实现

RabbitMQ延迟队列的实现 延迟消息是什么延迟消息的实现死信交换机代码实现 延迟消息插件 延迟消息是什么 延迟消息是将消息发送到MQ中&#xff0c;消费者不会立即收到消息&#xff0c;而是过一段时间之后才会收到消息&#xff0c;进行处理。在一些业务中&#xff0c;可以用到延…

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…

强化学习新突破:情节记忆与奖励机制引领多智能体协作

简介 本推文介绍了韩国科学技术院发表在人工智能顶会ICLR 2024上的论文《Efficient Episodic Memory Utilization of Cooperative Multi-Agent Reinforcement Learning》。该论文提出创新性高效情节记忆利用&#xff08;Efficient Episodic Memory Utilization&#xff0c;EMU…

密码翻译

密码翻译 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 在情报传递过程中&#xff0c;为了防止情报被截获&#xff0c;往往需要对情报用一定的方式加密&#xff0c;简单的加密算法虽然不足以完全避免情报…

【C++初阶】第7课—标准模版库STL(string_1)

文章目录 1. 什么是STL2. STL六大组件3. 标准库中string类3.1 auto关键字3.2 范围for3.3 string类的类型3.4 string类的常用接口(string类对象的常见构造)3.5 string的析构和赋值运算符重载3.6 string类对象的容量操作 1. 什么是STL STL(standard template library—标准模板库…

uniapp扭蛋机组件

做了一个uniapp的扭蛋机组件&#xff0c;可以前往下载地址下载 支持vue2、3、h5页面微信小程序&#xff0c;其余小程序未测试 示例图片

MyBatis的工作流程是怎样的?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis的工作流程是怎样的&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis的工作流程是怎样的&#xff1f; MyBatis 的工作流程可以分为几个主要步骤&#xff1a;从配置、映射到执行 SQL&#xff0c;最终获取数据库结…

MYSQL PARTITIONING分区操作和性能测试

PARTITION OR NOT PARTITION IN MYSQl Bill Karwin says “In most circumstances, you’re better off using indexes instead of partitioning as your main method of query optimization.” According to RICK JAMES: “It is so tempting to believe that PARTITIONing wi…

[软件工程]九.可依赖系统(Dependable Systems)

9.1什么是系统的可靠性&#xff08;reliability&#xff09; 系统的可靠性反映了用户对系统的信任程度。它反映了用户对其能够按照预期运行且正常使用中不会失效的信心程度。 9.2什么是可依赖性&#xff08;dependablity&#xff09;的目的 其目的是覆盖系统的可用性&#x…

vue3中使用watchEffect和watch函数时应当防止内存泄漏

官方文档&#xff1a;https://cn.vuejs.org/api/reactivity-core.html#watcheffect 也就是说当使用他们两个时候&#xff0c;使用完成之后要及时停止他们&#xff0c;防止一直在运行&#xff0c;停止他们之后&#xff0c;也可以再次开启。 watchEffect()​ 立即运行一个函数…

Wwise SoundBanks内存优化

1.更换音频格式为Vorbis 2.停用多余的音频&#xff0c;如Random Container的随机脚步声数量降为2个 3.背景音乐勾选“Stream”。这样就让音频从硬盘流送到Wwise&#xff0c;而不是保存在内存当中&#xff0c;也就节省了内存 4.设置最大发声数Max Voice Instances 5.设置音频…

Windows宝塔面板下IIS环境如何部署SSL证书?

Windows宝塔面板下IIS环境如何部署SSL证书&#xff1f; 平时服务器linux宝塔用的较多&#xff0c;所以linux系统宝塔&#xff0c;如何部署SSL证书还是比较熟悉&#xff0c;今天遇到一个windows的部署SSL证书&#xff0c;还是头一次&#xff0c;所以记录一下&#xff0c;以防忘…

【计算机视觉】图像的几何变换

最常见的几何变换有仿射变换和单应性变换两种&#xff0c;最常用的仿射变换有缩放、翻转、旋转、平移。 1. 缩放 将图像放大或缩小会得到新的图像&#xff0c;但是多出的像素点如何实现----插值 1.1 插值方法 最近邻插值 双线性插值 cv2.resize() 是 OpenCV 中用于调整图像…

深入浅出 Go 语言:数组与切片

深入浅出 Go 语言&#xff1a;数组与切片 引言 在 Go 语言中&#xff0c;数组和切片是两种非常重要的数据结构&#xff0c;用于存储和操作一组相同类型的元素。虽然它们看起来相似&#xff0c;但在使用上有很大的区别。理解数组和切片的区别以及如何正确使用它们&#xff0c;…

基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 超级电容特性 4.2 电池特性 5.完整工程文件 1.课题概述 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真。分析不同车速对应的电池&#xff0c;超级电容充放电变化情况。 2.系统仿…

y3编辑器文档3:物体编辑器

文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…

「嵌入式系统设计与实现」书评:学习一个STM32的案例

本文最早发表于电子发烧友论坛&#xff1a;【新提醒】【「嵌入式系统设计与实现」阅读体验】 学习一个STM32的案例 - 发烧友官方/活动 - 电子技术论坛 - 广受欢迎的专业电子论坛!https://bbs.elecfans.com/jishu_2467617_1_1.html 感谢电子发烧友论坛和电子工业出版社的赠书。 …

Qt Designer Ui设计 功能增加

效果展示 输入密码&#xff0c;密码错误&#xff0c;弹出提示 密码正确&#xff0c;弹出提示并且关闭原窗口 代码&#xff08;只提供重要关键主代码&#xff09;lxh_log.py代码&#xff1a; import sysfrom PySide6.QtWidgets import QApplication, QWidget, QPushButtonfrom …

RT Thread Studio新建STM32F407IG工程文件编译提示错误

编译提示错误 原因: RT 源码使用4.0.3的话&#xff0c;请用STM32F4支持包的0.2.2版本&#xff0c;就不会出错了。 如果支持包用0.2.3版本的话&#xff0c;需要用RT内核4.1.0版本。0.2.3 版本更新了一些针对内核4.1.0的驱动代码&#xff0c;这几个定义都是4.1.0里的。