当前位置: 首页 > news >正文

JavaWeb-Tomcat

1. Web服务器

  • web服务器由硬件和软件组成:
    • 硬件:计算机系统
    • 软件:计算机上安装的服务器软件,安装后可以为web应用提供网络服务。
  • 常见的JavaWeb服务器:
    • Tomcat(Apache):应用最广泛的web服务器。
    • Jetty:更轻量级、更灵活的servlet容器。
    • Jboss(Redhat):支持JavaEE,应用较广。
    • GlassFish(Orcale):应用不是很广。
    • Resin(Caucho)
    • Weblogic(Orcale):付费,适合大型项目。
    • Websphere(IBM):付费,适合大型项目。

在这里插入图片描述
服务器硬件为JRE提供硬件支持,JRE为Tomcat提供运行环境,Tomcat为APP提供网络服务。
JRE就像操作系统,Tomcat就像浏览器,APP就像网页。网页无法直接在操作系统上显示,必须由浏览器解析显示,浏览器也无法直接在计算机硬件上运行,必须通过操作系统与底层交互。也就是说,APP需要通过Tomcat提供的服务完成相应功能,而Tomcat需要在JRE上才能运行。

2. Tomcat

2.1 简介

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

2.2 安装

Tomcat版本、servlet版本和JavaEE版本对照关系

Servlet VersionTomcat VersionJDK Version
6.111.0.x17 and later
6.010.1.x11 and later
5.010.0.x (superseded)8 and later
4.09.0.x8 and later
3.18.5.x7 and later
3.18.0.x (superseded)7 and later
3.07.0.x (archived)6 and later (7 and later for WebSocket)
  1. 根据对照关系,选择相应的Tomcat版本,去Tomcat官网https://tomcat.apache.org/下载对应的版本。我这里下载9.0版本的解压版。页面下方还有源码可以下载。在这里插入图片描述
  2. 解压Tomcat到非中文无空格的路径。在解压之前,需要先安装好JDK,并配置好JAVA_HOME变量,如果之前安装过JDK,那么环境变量应该已经配置好了。
    在这里插入图片描述3. 点击bin/startup.bat启动服务,启动后窗口不能关闭。在这里插入图片描述
    在这里插入图片描述
  3. 打开浏览器输入http://localhost:8080访问测试,如果出现如下页面,说明打开服务成功。在这里插入图片描述
  4. 关闭服务时,可以通过关闭第三步打开的窗口,还可以启动bin/shutdown.bat来关闭服务。在这里插入图片描述
  5. 打开服务时,dos窗口出现乱码的原因是dos窗口的编码是GBK,而打印信息的编码是utf-8,所以会出现乱码,可以通过修改conf/logging.properties文件中的java.util.logging.ConsoleHandler.encoding修改为GBK即可解决问题。在这里插入图片描述
    在这里插入图片描述

2.3 Tomcat目录及测试

  • D:\apache-tomcat-9.0.83称为Tomcat的安装目录或根目录。

  • bin目录中存放的是二进制可执行文件,解压版下的bin目录中有startup.bat和shutdown.bat等文件,安装版下的内容与解压版可能不同。要使bin目录中的命令可以在命令行中使用,需要配置环境变量。在环境变量中,添加CATALINA_HOME的变量,值为Tomcat的安装路径,然后path中添加路径 %CATALINA_HOME%\bin。但是在配置好环境变量后,如果安装其他版本的Tomcat,点击该版本bin目录下的startup.bat文件,运行的也会是环境变量中绑定目录下的startup.bat文件。
    在这里插入图片描述

  • conf目录中存放的是配置信息,其下有4个非常重要的文件:

    • server.xml:配置整个服务器的信息,例如端口号。默认的HTTP请求的端口号是8080.在这里插入图片描述

    • tomcat-users.xml:存储tomcat用户的文件,保存用户名和密码,以及用户的角色信息。可以按照该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了。在这里插入图片描述

    • web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个HTML网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。在这里插入图片描述

    • context.xml:对所有应用的统一配置,通常我们不会去配置它。在这里插入图片描述

  • lib:Tomcat的类库,里面是jar文件。这个目录中的jar文件被Tomcat中的所有项目共享。在这里插入图片描述

  • logs:这个目录是用于存放日志文件的,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,也会记录在日志文件中。不需要的日志文件可以删除。在这里插入图片描述

  • temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除。

  • webapps:存放web项目的目录,其中每个文件夹都是一个项目。Tomcat有一些自带的项目,使用浏览器访问8080端口,访问的就是ROOT项目。在这里插入图片描述

  • work:与JSP有关。

  • LICENSE:许可证。

  • NOTICE:说明文件。

2.4 Web项目的标准结构

在这里插入图片描述

  • test_app:本应用的根目录。
    • static:非必要目录,约定俗称的名字,可以改成其他名字,用于存放静态资源如css、js和图片等。
    • WEB-INF:必要目录,并且名字不能更改,是受保护的资源目录,浏览器无法通过url直接访问该目录下的资源。在这里插入图片描述
      • classes:必要目录,用于存放字节码。如果项目中没有原码,则该目录不会出现。
      • lib:必要目录,存放此项目需要依赖的jar包。
      • web.xml:必要文件,项目的基本配置信息。较新版本中可以没有该文件。
    • index.html:访问该项目时默认的访问页面。在这里插入图片描述
    • 其他html文件:项目中的其他html页面。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

2.5 Web项目的部署方式

  1. 将编译好的项目直接放在Tomcat的webapps目录下。
  2. 将编译好的项目打包成war包,再放在webapps目录下,tomcat启动后会自动解压war包部署项目。
  3. 将编译好的项目放在其他路径下,通过配置XML文件使得tomcat能够找到对应的项目。
    • 将项目直接放在D盘根目录下,然后在tomcat安装目录的conf\Catalina\localhost目录下新建一个与项目名相同的xml文件,并在文件中加上如下代码<Context path="自定义的项目上下文路径" docBase="项目在磁盘中的位置" />。项目上下文路径是在浏览器中需要输入的项目名称,需要与项目名称相同,如果不同则需要配置其他信息。在这里插入图片描述
      项目部署信息:在这里插入图片描述
      访问项目:在这里插入图片描述
    • 在浏览器输入的url与服务器资源的对应关系:在这里插入图片描述
    • 访问webapps下自带的项目:
      • docs项目:在这里插入图片描述
      • examples:在这里插入图片描述
      • host-manager和manager:访问这两个项目需要验证用户名和密码,可以在上面提到过的tomcat-users.xml文件中配置用户信息,加入以下代码即可:<role rolename="admin-gui" /> <role rolename="admin-script" /> <role rolename="manager-script" /> <role rolename="manager-jmx" /> <role rolename="manager-status" /> <user username="admin" password="123456" roles="admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />在这里插入图片描述
        在这里插入图片描述
      • ROOT:ROOT项目的上下文路径不为ROOT,直接访问8080端口访问的就是ROOT项目。在这里插入图片描述

2.6 IDEA中开发并部署运行Web项目

首先在IDEA中创建JavaWeb工程,然后将Java工程构建成可用于部署的app,再将app部署在tomcat上运行,这一系列操作都通过IDEA来完成。

2.6.1 IDEA关联本地Tomcat

  • 打开IDEA的设置页面,找到Build,Execution,Deployment下的Application Servers。
    在这里插入图片描述
  • 点击加号并且选择Tomcat Server。
    在这里插入图片描述
  • 选择Tomcat的安装目录。在这里插入图片描述
  • 点击apply后,IDEA与Tomcat关联成功。在这里插入图片描述

2.6.2 IDEA创建JavaWeb工程

  • 首先创建一个空项目,空项目下可以放多个module,也可以直接创建web工程。

  • 检查项目的SDK版本,语法版本,以及项目编译后的输出目录。在这里插入图片描述

  • 创建一个普通的Java项目。在这里插入图片描述

  • 为Java项目添加依赖。点击后选择Tomcat。在这里插入图片描述

  • 为Java项目添加framework support。在这里要注意版本的匹配问题,4.0版本可能不一定适用。在这里插入图片描述

  • 将index.jsp文件替换为index.html文件。在这里插入图片描述

  • 处理配置文件,在工程下建立一个resources目录,用于存放配置文件。都放在src目录下也可以,但是会很混乱。标记该目录为资源目录,否则该文件不参与编译。在这里插入图片描述

  • 在web目录的WEB-INF目录下建立lib目录,用于存放项目所需要的jar包依赖,并将lib目录添加为项目的依赖,环境级别选择module级别,降低对其他项目的影响。后续可以使用maven统一解决。在这里插入图片描述
    在这里插入图片描述

2.6.3 IDEA部署和运行web项目

  • 可以通过查看web目录有无特殊标记确定IDEA是否识别该项目为web项目,以及artifacts下,有没有对应的_war_exploded,如果没有,就点加号添加。在这里插入图片描述
    在这里插入图片描述
  • 在菜单栏的run选项下找到edit configuration,并点击加号添加本地Tomcat服务器。在这里插入图片描述
  • 然后在弹出页面的deployment选项中,通过加号添加要部署到Tomcat中的artifacts。application context就是应用上下文路径,也就是在url中需要填写的路径,这里可以和工程名不一样,也可以不写,但是要保留 ‘/’。在这里插入图片描述
  • after launch选项是指项目启动成功后,是否自动打开浏览器,并输入URL中的地址。点击apply完成设置。在这里插入图片描述
  • 运行项目。在这里插入图片描述

2.6.4 IDEA部署运行项目的原理

  • IDEA并没有将编译好的项目直接放入Tomcat的webapps目录下,而是根据关联的tomcat,创建了一个tomcat副本,然后将项目部署到了这个副本中。
  • IDEA的tomcat副本在用户文件夹下的AppData\Local\JetBrains\IntelliJIdea2023.2\tomcat中。在这里插入图片描述
  • IDEA的tomcat副本并不是一个完整的tomcat,副本里只准备了和当前项目相关的配置文件。
  • IDEA启动tomcat时,是让本地tomcat按照tomcat副本里的配置文件运行。
  • IDEA的tomcat副本中的conf\Catalina\localhost\xml文件中配置了项目的上下文路径和磁盘中的路径,所以tomcat是通过该文件获得项目的路径的。

相关文章:

JavaWeb-Tomcat

1. Web服务器 web服务器由硬件和软件组成&#xff1a; 硬件&#xff1a;计算机系统软件&#xff1a;计算机上安装的服务器软件&#xff0c;安装后可以为web应用提供网络服务。 常见的JavaWeb服务器&#xff1a; Tomcat&#xff08;Apache&#xff09;&#xff1a;应用最广泛的…...

k8s之Pod常用命令详解、镜像拉取策略(imagePullPolicy)

常用命令 kubectl api-resources #查询可操作的资源对象列表kubectl get pod #查看默认命名空间下所有pod kubectl describe pod podname #获取默认命名空间下POD详情# 如果要查看制定命名空间则使用 -n nsname kubectl get pod -n ns kubectl describe pod podname -n ns# 以Y…...

Spark低版本适配Celeborn

Spark-3.5版本以下使用Celeborn时&#xff0c;无法使用动态资源&#xff0c;对于低版本的Spark&#xff0c;Celeborn提供了patch。各版本patch如下 https://github.com/apache/incubator-celeborn/tree/main/assets/spark-patch 下载patch&#xff0c;这里下载spark-3版本&am…...

idea报错:Error:java: 不允许在使用 -release 时从系统模块 java.xml 导出程序包?

File->Settings, 把红框编译选中选项全部删除掉...

Vector Quantized Diffusion Model for Text-to-Image Synthesis

Vector Quantized Diffusion Model for Text-to-Image Synthesis Shuyang Gu, University of Science and Technology of China, Microsoft, CVPR2022, Cited: 340, Code, Paper 1. 前言 我们提出了用于文本到图像生成的矢量量化扩散(Vector Quantized Diffusion Model&…...

solidity实现ERC1155多代币标准

文章目录 1、NFT - 维基百科2、IERC1155MetadataURI3、IERC1155Receiver4、IERC11555、ERC11556、NFT11557、开源地址 1、NFT - 维基百科 ERC-1155 标准于2018年6月由Witek Radomski、Andrew Cooke、Philippe Castonguay、James Therien、Eric Binet及Ronan Sandford提出。此标…...

10、外观模式(Facade Pattern,不常用)

外观模式&#xff08;Facade Pattern&#xff09;也叫作门面模式&#xff0c;通过一个门面&#xff08;Facade&#xff09;向客户端提供一个访问系统的统一接口&#xff0c;客户端无须关心和知晓系统内部各子模块&#xff08;系统&#xff09;之间的复杂关系&#xff0c;其主要…...

<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述 1 程序设计语言的基本概念 1-1 程序设计语言的目的 程序设计语言是为了书写计算机程序而人为设计的符号语言&#xff0c;用于对计算过程进行描述、组织和推导。 1-2 程序语言分类 低级语言 : 机器语言&#xff08;计算机硬件只能识别0和1的指令序列)&…...

C/C++---------------LeetCode第278. 第一个错误的版本

第一个错误的版本 题目及要求二分查找 题目及要求 你是产品经理&#xff0c;目前正在带领一个团队开发新的产品。不幸的是&#xff0c;你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的&#xff0c;所以错误的版本之后的所有版本都是错的。 假设你…...

C语言三种循环输出9*9乘法表

解题思路&#xff1a; 1、外层循环控制1~9循环 2、内层控制循环的次数 比如&#xff1a; 1 * 1 1 循环一次 1 * 1 1 1 * 2 循环两次 依此类推 int i, j;printf("for 打印9*9乘法表\r\n");for(i 1; i <10; i) {for(j 1; j < i;j) {printf("%d * %d %d…...

IntelliJ IDEA 之初体验

文章目录 第一步&#xff1a;下载与安装 IntelliJ IDEA1&#xff09;官网下载2&#xff09;选择那种安装包3&#xff09;开始下载4&#xff09;解压 第二步&#xff1a;启动 IntelliJ IDEA第三步&#xff1a;创建第一个 Java 项目第四步&#xff1a;运行第一个 Java 程序1&…...

java中synchronized和Lock的区别是什么?

synchronized 和 Lock 都是 Java 中用于实现线程同步的机制&#xff0c;但它们在使用方式和功能上存在一些区别。 使用方式 synchronized&#xff1a; 是 Java 语言关键字&#xff0c;可用于方法或代码块。通过 synchronized 关键字实现的同步是隐式的&#xff0c;无需手动释…...

ESP32-Web-Server编程-通过 Base64 编码在网页中插入图片

ESP32-Web-Server编程-通过 Base64 编码在网页中插入图片 概述 不同于上节 ESP32-Web-Server编程-在网页中通过 src 直接插入图片&#xff0c;本节引入 Base64 编码来显示图片。 Base64 是一种用64个字符来编码表示任意二进制数据的方法。任何符号都可以转换成 Base64 字符集…...

聊一聊大模型 | 京东云技术团队

事情还得从ChatGPT说起。 2022年12月OpenAI发布了自然语言生成模型ChatGPT&#xff0c;一个可以基于用户输入文本自动生成回答的人工智能体。它有着赶超人类的自然对话程度以及逆天的学识。一时间引爆了整个人工智能界&#xff0c;各大巨头也纷纷跟进发布了自家的大模型&#…...

pandas空格及网页空格符NBSP替换处理

df3[动作一课程内容]df3[动作一课程内容].str.replace( ,) df3[动作一课程内容]df3[动作一课程内容].str.replace( ,) 截图中代码为python展示代码&#xff0c;由于网页空格符和常规空格符看起来大致相同&#xff0c;但却不能用常规空格替换解决...

智能优化算法应用:基于战争策略算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于战争策略算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于战争策略算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.战争策略算法4.实验参数设定5.算法结果6.参考…...

数据结构和算法-栈

数据结构和算法-栈 1. 栈的介绍 栈的介绍&#xff1a; 栈的英文为(stack)栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端&#xff0c;为变化的一端&#xff0c;称为栈顶&#xff0c;另一端为固…...

C#基础与进阶扩展合集-进阶篇(持续更新)

目录 本文分两篇&#xff0c;基础篇点击&#xff1a;C#基础与进阶扩展合集-基础篇 一、进阶 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、值类型与引用类型 5、程序设置当前项目工作目录 6、获取App.config配置文件中的值 7、Linq常用语句 8、…...

快速入门GitHub 之超简单的注册方法和超好用的使用技巧

最近几天发现有些人对Github网站很好奇,但是无奈自己不会用,因为是外国人的网站,首先自己的英文就不过关。对于这个,其实可以用谷歌浏览器去浏览Github,它有一键翻译的功能。但还是有必要介绍一下关于Github的一些功能和具体操作,初学编程语言的小伙伴们一定对 GitHub 有…...

ESP32-Web-Server编程- 在 Web 上开发动态纪念册

ESP32-Web-Server编程- 在 Web 上开发动态纪念册 概述 Web 有很多有趣的玩法&#xff0c;在打开网页的同时送她一个惊喜。 需求及功能解析 本节演示在 ESP32 上部署一个 Web&#xff0c;当打开对应的网页时&#xff0c;将运行动态的网页内容&#xff0c;显示炫酷的纪念贺词…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...