Tomcat部署——个人笔记

news2024/9/23 15:26:49

Tomcat部署——个人笔记

文章目录

    • @[toc]
      • 简介
      • 安装
      • 配置文件
      • WEB项目的标准结构
      • WEB项目部署
      • IDEA中开发并部署运行WEB项目

本学习笔记参考尚硅谷等教程。

简介

Apache Tomcat 官网

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

安装

下载

进入官网,查看左边侧边栏(若没出现可能是浏览器窗口宽度不够,拉长之后自动出现),在Download一栏中选择要下载的Tomcat版本。

注意:Tomcat 9 之前开发的项目在 Tomcat 10之后的版本不兼容。

根据表中提示选择要下载的Tomcat 版本 :Apache Tomcat® - Tomcat的版本选择

此处我选择用Java 17来进行开发,所以我选择的是Tomcat 10,详细版本为10.1.26

下载Tomcat 10对应的压缩文件:64-bit Windows zip,之后在适合的位置解压缩。

配置环境变量

右键”我的电脑“ → 系统设置 → 高级系统设置 → 高级 → 环境变量 → 系统变量 → 新建

变量名中填写: JAVA_HOME

变量值中填写:你的JAVA的根目录(使用 IDEA 会自动下载JAVA,所以可以去IDEA查找对应 JAVA 的下载目录)

测试

在 Tomcat 的解压根目录中,打开 bin/startup.bat ,若启动成功,则安装完成。若闪退,则可能是配置JAVA_HOME的时候出错。

启动成功之后,观察倒数第二行出现的“http-nio-数字”,此数字为端口(一般默认为8080)。在浏览器中输入 localhost:数字 ,则可进入Tomcat服务器的首页。

Tomcat 的关闭方式:
1.关闭Tomcat的运行窗口
2.运行bin/shutdown.bat

配置文件

启动成功 Tomcat 时,窗口内字体为乱码(cmd默认编码方式为GBK,而Tomcat编码默认为UTF-8)
在conf/logging.properties中修改 java.util.logging.ConsoleHandler.encoding项,使其=GBK。

其他情况出现乱码也如上,在对应的配置项操作。

conf/server.xml 中可以修改服务器相关配置(如端口号修改)

conf/tomcat-users.xml 配置管理类型项目的账号密码

WEB项目的标准结构

一个标准的可以用于发布的WEB项目标准结构如下

Tomcat 根目录 / webapps

└─app/

├─ static/
│ ├── css
│ ├── img
│ └── js

├─ WEB-INF/
│ ├── classes
│ ├── lib
│ └── web.xml

└─ index.html

  • app 本应用根目录
    • static 非必要目录,约定俗成的名字,一般在此处放静态资源 ( css js img)
    • WEB-INF 必要目录,必须叫WEB-INF,受保护的资源目录,浏览器通过url不可以直接访问的目录
      • classes 必要目录,src下源代码,配置文件,编译后会在该目录下,web项目中如果没有源码,则该目录不会出现
      • lib 必要目录,项目依赖的jar编译后会出现在该目录下,web项目要是没有依赖任何jar,则该目录不会出现
      • web.xml 必要文件,web项目的基本配置文件. 较新的版本中可以没有该文件,但是学习过程中还是需要该文件
    • index.html 非必要文件,index.html/index.htm/index.jsp为默认的欢迎页

WEB项目部署

方式1 直接将编译好的项目放在webapps目录下 (已经演示)

方式2 将编译好的项目打成war包放在webapps目录下,tomcat启动后会自动解压war包(其实和第一种一样)

方式3 可以将项目放在非webapps的其他目录下,在tomcat的conf下创建Catalina/localhost目录,并在该目录下准备一个app.xml文件,使Tomcat获取指向该项目的路径。

<!-- 
	path: 项目的访问路径,也是项目的上下文路径,就是在浏览器中,输入的项目名称
    docBase: 项目在磁盘中的实际路径
 -->
<Context path="/app" docBase="D:\mywebapps\app" />

IDEA中开发并部署运行WEB项目

打开 IDEA 设置

左侧侧边栏,选中“构建,执行,部署”项(Build,Execution,Deployment),再选中应用程序服务器(Application Servers)

点击右侧窗口的左上方出现的 ,在弹出菜单选择Tomcat服务器(Tomcat Server)

主目录(Tomcat Home)选择Tomcat的安装目录

点击ok即可关联。

使用Tomcat开发项目时,推荐先创建一个空项目,这样可以在一个空项目下同时存在多个modules,不用后续来回切换之前的项目,当然也可以忽略此步直接创建web项目

使用IDEA创建项目。

创建完成后,选中项目结构(Project Structure)

image-20240801170014725

检查项目的SDK,语法版本,以及项目编译后的输出目录

image-20240801170150158

创建一个普通的JAVA项目

image-20240801170400392

image-20240801170449637

创建完毕后,打开项目结构,为项目添加Tomcat依赖

image-20240801170916440

image-20240801171008345

image-20240801171031330

添加框架支持(选中相应module后,双击shift,搜索"添加框架支持")

image-20240801171452171

image-20240801171800981

删除module目录下出现的index.jsp ,替换为 index.html

处理配置文件

  • 在工程下创建resources目录,专门用于存放配置文件(都放在src下也行,单独存放可以尽量避免文件集中存放造成的混乱)
  • 标记目录为资源目录,不标记的话则该目录不参与编译(右键resources目录,选择"将目录标记为…“,在弹出菜单中选择"资源根目录”)

处理依赖jar包问题

  • 在WEB-INF下创建lib目录
  • 必须在WEB-INF下,且目录名必须叫lib
  • 复制jar文件进入lib目录
  • 将lib目录添加为当前项目的依赖(右键lib目录,选择"添加为库…" → 环境级别推荐选择module 级别,降低对其他项目的影响,name可以空着不写)

在web文件夹下,生成一个 WEB 项目的标准结构,将要开发的项目放入。

image-20240801172634825

配置项目,使其在Tomcat服务器上运行

image-20240801173300244

image-20240801173412178

image-20240801173448419

image-20240801173530764

点击apply 应用后,回到Server部分. After Launch是配置启动成功后,是否默认自动打开浏览器并输入URL中的地址,HTTP port是Http连接器目前占用的端口号

image-20240801173722109

运行项目

image-20240801174042138

访问对应文件,成功

image-20240801174109312

工程结构和可以发布的项目结构之间的目录对应关系

image-20240801174129857

IDEA部署并运行项目的原理

  • idea并没有直接进将编译好的项目放入tomcat的webapps中
  • idea根据关联的tomcat,创建了一个tomcat副本,将项目部署到了这个副本中
  • idea的tomcat副本在C:\用户\当前用户\AppData\Local\JetBrains\IntelliJIdea2022.2\tomcat\中
  • idea的tomcat副本并不是一个完整的tomcat,副本里只是准备了和当前项目相关的配置文件而已
  • idea启动tomcat时,是让本地tomcat程序按照tomcat副本里的配置文件运行
  • idea的tomcat副本部署项目的模式是通过conf/Catalina/localhost/*.xml配置文件的形式实现项目部署的

image-20240801174204152

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

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

相关文章

虚拟机Windows server忘记密码解决方法

原理 utilman.exe是Windows辅助工具管理器程序&#xff0c;‌虽然它本身不是一个关键的系统进程&#xff0c;‌但通过修改这个文件&#xff0c;‌用户可以访问一些有用的UI设置。‌在某些情况下&#xff0c;‌比如忘记密码需要重置时&#xff0c;‌通过修改utilman.exe文件为c…

别再羡慕别人了!学会这四招,你的视频也能爆红网络

现在的短视频剪辑实在是太火爆了&#xff0c;动不动打开抖音刷一下就两三个小时过去了&#xff0c;每天被这短视频洗脑慢慢地身边也越来越多人自学视频的剪辑&#xff0c;所以&#xff0c;作为自学多年的的自媒体打工人&#xff0c;好用的剪辑软件还是要推荐给大家的&#xff1…

包拯断案 | 数据库从库复制延迟引发高可用风险 怎么破@还故障一个真相

提问&#xff1a;作为DBA运维的你是否遇到过这些烦恼 1、数据库从库复制出现了延迟&#xff0c;是什么原因导致的&#xff1f; 2、延迟引发了高可用风险&#xff0c;应该如何处理&#xff1f; 心中有章&#xff0c;遇事不慌 作为DBA的你&#xff0c;遇到问题无从下手&#xf…

【轨物方案】评估光伏组件发电性能一致性方案

光伏电站建设后运行周期长达二十多年&#xff0c;对于电站运营者来说&#xff0c;基础设施的稳定、安全、高效的运行是至关重要的。然而从近些年光伏的发展过程中看到&#xff0c;在电站规划到后期运维整个过程中可能存在着诸多问题&#xff0c;如设备选型不当、施工建设质量差…

RHCSA第一次作业

目录 1、创建以上目录和文件结构&#xff0c;并将/yasuo目录拷贝4份到/目录下 2、查看系统合法shell 3、查看系统发行版版本 4、查看系统内核版本 5、临时修改主机名 6、为/yasuo/ssh_config文件创建软链接/ssh_config.link到/mulu下 7、创建目录/mulu ,重命名并移动/ss…

Linux用户-su命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注我&#xff0c;我尽量把自己会的都分享给大家&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux是一个多用户多任务操作系统,这意味着它可以同时支持多个用户登录并使用系统。…

【前端面试题】后端一次性返回10w条数据,该如何渲染?

后端一次返回 10w 条数据&#xff0c;本身这种技术方案设计就不合理。 问题分析&#xff1a; JS 支持处理10w 条数据&#xff0c;但 DOM 一次渲染 10w 条数据&#xff0c;可能会卡顿&#xff0c;所以需想办法减少 DOM 渲染 若非要实现&#xff0c;则可以考虑以下两种方案 自…

「测试线排查的一些经验-上篇」 后端工程师

文章目录 端口占用脚本失灵线上部署项目结构模版配置文件生效 一般产品研发过程所使用的环境可分为&#xff1a; 研发环境-dev测试环境-test生产环境-prod 软件开发中&#xff0c;完整测试环境包括&#xff1a;UT、IT、ST、UAT UT Unit Test 单元测试 IT System Integration …

《C语言程序设计 第4版》笔记和代码 第十二章 数据体和数据结构基础

12.1从基本数据类型到抽象数据类型 1 所有的程序设计语言都不能将所有复杂数据对象作为其基本数据类型&#xff0c;因此需要允许用户自定义数据类型&#xff0c;在C语言中&#xff0c;就存在构造数据类型&#xff08;复合数据类型&#xff09;。 2 结构体是构造数据类型的一种…

使用Openvino部署C++的Yolov5时类别信息混乱问题记录

使用Openvino部署C的Yolov5时类别信息混乱问题记录 简单记录一下。 一、问题描述 问题描述&#xff1a;在使用Yolov5的onnx格式模型进行C的Openvino进行模型部署时&#xff0c;通过读取classes.txt获得类别信息时&#xff0c;出现模型类别混乱&#xff0c;或者说根本就不给图…

【原创】java+swing+mysql学分管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景&#xff1a; 随着信息技术的…

嵌入式单片机中在线调试工具使用方法

大家好,相信很多小伙伴都听说过,或者用过SystemView这款工具。 它是一个可以在线调试嵌入式系统的工具,它可以分析RTOS有哪些中断、任务执行了,以及这些中断、任务执行的先后关系。 还可以查看一些内核对象持有和释放的时间点,比如信号量、互斥量、事件、消息队列等,这在…

Vue3 form表单赋值后,input输入框无法输入

1.使用reactive初始化数据: 需要用一个对象包裹数据,使其变成响应式数据 Form表单及JS中的使用都需要 “paramr.formUser” 进行调用 原因: 使用reactive生成的响应式数据&#xff0c;在直接赋值时把响应式数据给替换为了普通数据了&#xff0c;导致无法监听数据的变化。 2. …

Flutter——权威常用组件demo代码开源

背景 自学的过程中&#xff0c;并记录下来仅供大家一起学习 开源地址&#xff1a;https://github.com/z244370114/flutter_demo

软件测试经典面试题,助你面试加分

一 时间紧迫的情况下&#xff0c;如何做好测试工作&#xff1f; 对需求要明确&#xff0c;对需求的优先级也要明确&#xff0c;在项目的过程中就可以少做变更的工作。减少测试的工作量。 由资深测试工程师对测试用例进行设计&#xff0c;并进行用例评审。 用例要重点覆盖主要…

Cocos Creator2D游戏开发(10)-飞机大战(8)-计分和结束

现在游戏基本能完了, 飞机能发射子弹,打了敌机,敌机也能炸; 接下来要做计分了; 步骤: 搞出一个lable让lable显示炸了多少飞机 开搞: ①创建一个Lable标签 ② root.ts文件 添加 property(Label) player_score: Label; // 标签属性 标签绑定 ③ 代码添加 注册 然后回调 contac…

iOS弱引用

背景&#xff1a;在面试过程中被问到如果两个对象已经发生循环引用了&#xff0c;该如何将他们剪断&#xff0c;在运行态的时候。 由于这个场景比较抽象&#xff0c;我理解面试官是希望我通过运行时的方法和方式来解决循环引用。 解决方案一: 重写setter用关联对象来实现wea…

【C++11】:右值引用移动语义完美转发

目录 前言一&#xff0c;左值引用和右值引用二&#xff0c;左值引用与右值引用比较三&#xff0c;探索引用的底层四&#xff0c;右值引用使用场景和意义4.1 解决返回值问题4.2 STL容器插入接口的改变 五&#xff0c;移动语义六&#xff0c;完美转发6.1 模板中的&& 万能…

【动态路由协议】RIP

一、前导知识 动态路由协议分类&#xff1a; 1.IGP(内部网关协议&#xff0c;位于同一个自治系统内) 1.1距离矢量路由协议 RIP&#xff08;距离矢量路由&#xff09; 1.2链路状态路由协议 OSPF&#xff08;开放式最短路径优先&#xff09; IS-IS&#xff08;中间系统到中间系统…