idea17创建tomcat项目(计网底层核心理解!)

创建普通Javawb项目

进入idea,在开始界面或者进入后的界面,创建项目(几乎所有的创建项目都是这样)在文件管理器中显示为一个文件夹

点击如下三个地方,

补充:javaenterprise 是 Java EE(Java Platform, Enterprise Edition)的通俗叫法,后来改名为 Jakarta EE(因为 Oracle 把 Java EE 的商标权转给了 Eclipse 基金会),核心含义没变 ------ 它是一套专门用于开发企业级应用的 Java 技术规范
WebApplication(Web 应用)就是一套能跑在 Web 服务器(比如 Tomcat)上、通过浏览器 / 客户端访问的完整程序包------ 你写的 JavaWeb 项目,本质就是一个 WebApplicatio

点击next之后就显示如下,写自己的项目名称,选择项目目录,点击finish

创建出来的如下图所示

然后在web文件夹下创建WEB-INF目录

然后在WEB-INF目录下创建web.xml文件

补充:

  1. WEB-INF 目录的核心价值:
  • 安全隔离 :里面的文件(比如 classes、lib、web.xml)浏览器无法直接访问 (比如输入 http://localhost:8080/项目名/WEB-INF/web.xml 会报 403),避免核心代码 / 配置泄露;
  • 资源存放:集中存放 Web 应用的核心资源(编译后的代码、依赖包、配置文件),Tomcat 启动时会优先加载这个目录。

2.web.xml的核心价值

作用 通俗解释 举例
声明 Web 应用版本 告诉 Tomcat 遵循哪个 Servlet 规范 <web-app version="4.0">
配置 Servlet 映射 不用 @WebServlet 注解时,指定 Servlet 访问路径 <servlet-mapping> 配置 /hello 对应 HelloServlet
配置全局参数 整个 Web 应用共用的参数(比如数据库地址) <context-param> 配置 db.url
配置过滤器 / 监听器 处理请求拦截、应用启动逻辑 登录验证过滤器、统计在线人数监听器
指定默认首页 访问 http://localhost:8080/项目名/ 时默认显示的页面 <welcome-file-list> 配置 index.jsp

此时点开右上角,点击edit开头这个

Edit Configurations(编辑配置)是 IDEA 里管理所有程序运行 / 调试规则的入口,针对 Tomcat 来说,它的核心作用是:告诉 IDEA "你要启动哪个 Tomcat 服务器?要把哪个 Web 项目部署到这个 Tomcat 上?部署成什么格式?访问路径是什么?"

简单类比:

  • Tomcat 是 "电影院",你的 exercise 项目是 "电影";

  • Edit Configurations 就是 "放映设置"------ 配置 "用哪个电影院(Tomcat 实例)放哪部电影(exercise 项目)、怎么放(部署格式)"。

  • 只有配置正确,IDEA 才能把你的 exercise 项目正确部署到 Tomcat 上
    war exploded 的核心特点:

  • IDEA 会把你的 exercise 项目按 Web 规范(包含 WEB-INF、web.xml 等)生成一个解压后的目录(而非压缩包);

  • 启动 Tomcat 时,IDEA 会自动把这个解压目录部署到 Tomcat 的运行目录中;

  • 开发时改代码后,可通过 "热部署" 直接生效(不用重新打包),这也是开发阶段最常用的方式。

部署格式 含义(通俗版) 适用场景
war 把项目打包成标准的 .war 压缩包,部署到 Tomcat 的 webapps 目录 生产环境部署
war exploded 不打包成压缩包,直接把项目的 "解压后目录" 部署到 Tomcat 开发 / 调试阶段

创建完成之后如下图所示

项目结构,遵循javaee规范

你的项目/

├── src/

└── web/

├── WEB-INF/ (必须手动加,浏览器无法直接访问,安全)

│ ├── web.xml (必须手动加,Web 应用的核心配置文件)

│ ├── classes/ (存放编译后的 .class 文件,IDEA 会自动生成和管理,不用手动创建)

│ └── lib/ (存放项目依赖的 jar 包,需要就加上,也非必须)

└── index.jsp

点开这个index.jsp这个是我们网站的一个前端显示,用jsp显示的,可以写一些标题,方便我们后续运行时显示

再次点击如图所示位置

进入这个界面

1.这个界面是什么?

这个界面是 IDEA 中对 Tomcat 服务器运行时行为 的配置中心。你可以把它理解为:告诉 IDEA 你要 "用哪个 Tomcat、用哪个 JDK、监听哪个端口、启动后做什么"。

  1. 界面里的关键配置项解释

① Application server

  • 这里显示的是 Tomcat 9.0.10,表示 IDEA 会调用你本地安装的这个版本的 Tomcat 来运行项目。
  • 点击 Configure... 可以修改或指定其他版本的 Tomcat 安装目录。

② Open browser

  • After launch:勾选后,Tomcat 启动成功后,IDEA 会自动用默认浏览器打开你设置的地址。
  • 地址栏:http://localhost:8080/,这是启动后浏览器自动访问的 URL。如果你的项目上下文路径是 /exercise,这里应该改成 http://localhost:8080/exercise

③ JRE

  • 这里显示的是 Default (1.8 - project SDK),表示 IDEA 会使用项目默认的 JDK 版本(JDK 1.8)来启动 Tomcat。
  • 点击右侧的 ... 可以切换其他已安装的 JDK。

④ Tomcat Server Settings(端口配置)

"端口" 相关配置:

  • HTTP port8080,这是 Tomcat 监听 HTTP 请求的端口,也是你在浏览器中访问项目时需要加在 localhost 后的端口号。
  • HTTPS port:HTTPS 协议的端口,默认未配置,一般用于需要加密传输的场景。
  • JMX port1099,用于 JMX 监控和管理 Tomcat 内部状态,开发时一般不用改。
  • AJP port:用于和 Apache 等 Web 服务器集成,现在已很少使用。

⑤ On 'Update' action

  • 这里设置为 Update classes and resources,意思是当你在 IDEA 中点击 "更新"(或按快捷键)时,IDEA 会自动把修改后的 Java 类和资源文件同步到 Tomcat 运行目录,实现热更新,不用重启服务器。

⑥ Before launch

  • 这里的 Build, Build Artifacts 表示在启动 Tomcat 之前,IDEA 会先自动编译项目(Build),并构建部署用的 Artifact(比如 war exploded),确保你运行的是最新的代码。

按照下图所示流程对tomacat进行配置

1.选择tomcat的版本,tomcat的存在形式是与1个文件夹,电脑可以配置多个tomcat文件

2.tomcat的配置,当idea中主动点击更新按钮代码更新了,idea执行什么操作

  • 设置为 Update classes and resources 的效果 :IDEA 会自动:✅ 重新编译你修改的 Java 类(Servlet / 工具类等),把新的 .class 文件同步到 Tomcat;✅ 同步你修改的静态资源(HTML/CSS/JS/ 图片等)到 Tomcat;✅ 不会重启 Tomcat,同步完成后刷新浏览器就能看到修改后的效果。
  • 其他选项
  • Update resources:只更新静态资源(HTML/CSS/JS/ 图片等),Java 代码不会更新。
  • Redeploy:重新部署整个项目(相当于先卸载再重新部署,比重启快一点,但还是比较慢)。
  • Restart server:完全重启 Tomcat 服务器,所有修改都生效,但最耗时。
  1. On frame deactivation(IDEA 失去焦点时的行为)
  • 字面意思:当你离开 IDEA(比如切到浏览器、微信、桌面)时,IDEA 要执行什么操作。
  • 设置为 Update classes and resources 的效果 :你改完代码后,只要点击浏览器(IDEA 失去焦点),IDEA 会自动触发更新,把新代码 / 资源同步到 Tomcat------ 连手动点 "Update" 都省了,更方便。

3.选择jdk,默认第一个选项是选择默认的jdk

设置端口号

服务器通过不同的端口号区分,端口号任意服务器都可以申请,同一时间一个端口号只能被一个服务器使用,因此访问时可能这个端口号正在被使用,就会申请不到,可以设置成别的使用频率低的端口号,更容易访问到

端口号的范围(16 位)

0 ~ 65535(共 65536 个)

端口范围 名称 用途
0 ~ 1023 知名端口 (Well-known Ports) 系统服务专用,如 HTTP (80), HTTPS (443), FTP (21)。需要管理员权限才能绑定。
1024 ~ 49151 注册端口 (Registered Ports) 用于常见的应用程序服务,如 MySQL (3306), Tomcat (8080), Redis (6379)。
49152 ~ 65535 动态 / 私有端口 (Dynamic/Private Ports) 用于临时连接或自定义服务,一般不主动绑定。
  • Tomcat、Jetty、JBoss 等 Java 服务器默认用 8080
  • Node.js、Python Flask 等 Web 框架默认用 300050008000
  • MySQL 默认用 3306
  • Redis 默认用 6379
    每一台设备都有自己的ip地址,有了iP才能够上网,不管是手机电脑还是什么,在同一个网内,比如校园网,公网ip地址相同,内网ip地址不同,通过不同的iP对设备进行区分,这样你向服务器申请资源时,服务器通过ip地址找到你,把资源发给你
    同时电脑可以作为服务器,在你电脑部署了服务器之后就可以作为服务器使用,服务器的iP就是你的电脑的ip,但是电脑可以部署多个服务器(tomcat)因此为了区分服务器,给服务器设置了端口号,一个电脑上不同的服务器端口号必须不同,但是不同电脑上可以有相同的端口,就像不同小区都可以有8080这个门牌号,仍然可以区分。
    虽然公网ip+内网ip可以找到你的电脑,但是你的电脑有不同的客户端,微信,王者荣耀,音乐,在不同的客户端申请数据也需要区分,不然服务器不知道把数据返回给你的哪个客户端,所以客户端也有端口号,但是客户端的端口号是操作系统自动分配的,操作系统已经内置了这个功能,比如在浏览器访问百度,浏览器申请数据,操作系统就给浏览器一个端口号,然后服务器收到请求,就给这个地址公网ip+内网ip+端口号,找到浏览器,发给他数据,从而找到我们要显示的页面。
    (电脑上的客户端用的是动态端口号,操作系统一般会自动从 49152 ~ 65535 这个区间里随机拿一个,用完就关,端口立刻释放,下次再连,又是另一个随机端口)
    在举个例子,就是京东,淘宝,百度的网页为什么我们能一直访问到,就是他们的服务器创建好之后,占用自己电脑的8080端口。然后一直不停止,电脑也不关机,所以服务器一直处于启动状态,一直可以被访问
    (每个电脑都有6万多个端口号,同一时间同一端口只能被一个占用,除了
    49152 ~ 65535
    这个区间的端口是操作系统分配给客户端的,剩下的端口就是分配给服务器使用)
    这个过程需要的是路由器,只要上网就需要路由器,你的电脑、设备等,有自己的设备ip,但是上网需要路由器把你转换成公网ip,然后就能发数据收数据。
    回到了关键为什么8080会容易被占用?

因为除了客户端软件,电脑上一些软件自带服务器,他们会占用端口,他们会问操作系统,这个8080端口我想占用,操作系统查看一下,这个端口没人用,就给他们了,这个端口(类似房间)是一个常用的端口,很多软件想用,所以申请这个端口可能申请不到,如果强行访问,就会访问到正在使用这个端口的界面。

现在可以写一个不太常见的端口号了,主包写的8081,然后先点击apply应用,然后点击ok

这个上面有一个name,这个是给你的这套配置起一个名字,用来在 IDEA 的运行配置列表里

标识和区分不同的启动方案,和你的项目名字,tomcat名字都没有关系,可以随便起一个,默认他给你放的是你的tomcat版本号作为名字(这也代表了同一个项目可以有不同的配置方案,就像同一个人物不同的皮肤)

现在一切都配置好了,如何让这个项目运行跑起来?

找到下载的tomcat的压缩包,复制到自己的jdk项目所在的磁盘中(主包在d盘),然后解压

然后进入解压后的文件,目录结构应该如下图所示

tomcat文件目录解析

目录名 核心作用(通俗版)
/bin 存放启动 / 停止脚本(可执行文件)、Tomcat 工具程序
/conf 存放配置文件(比如端口、用户权限)
/lib 存放 Tomcat 运行所需的 jar 包(包括 Servlet 规范实现)
/webapps 存放你的 Web 项目(war 包 / 项目文件夹)
/logs 存放运行日志(报错、访问记录都在这)
/temp 存放临时文件(Tomcat 运行时产生)
/work 存放 JSP 编译后的 .class 文件

tomcat是一种不用安装解压就能直接使用的软件,这种软件没有自己的可视化界面,怎末启动,关闭他呢?

找到bin文件下

windows系统

启动start.bat

关闭shutdown.bat

linux系统

启动start.sh

关闭shutdown.sh

(这也是tomcat的便捷之处,不论在哪个系统直接下载同一个文件夹就能使用,tomcat的跨平台特性)

注意webapps这个目录,所有的tomcat项目都是在这个目录中的,

但是我们是在idea中创建的项目啊,怎末放到这个目录里面的

看这个页面,Deployment是部署的意思,这个就是idea告诉tomcat

  • 要部署哪个项目(这里是 exercise:war exploded
  • 以什么方式部署(war exploded 是解压式部署,方便开发调试)
  • 访问路径是什么(这里 Application context: / 表示直接通过根路径访问,如 http://localhost:8080/


最下面一行写了部署方式

Artifact

Artifact 可以理解为 "项目的可部署产物",是 IDEA 帮你把项目代码打包 / 整理成的、可以直接放到服务器上运行的格式。

常见的 Artifact 类型有:

  • war exploded :解压式部署(开发首选)

    • 项目以文件夹形式部署,修改代码 / 资源后能热更新,不用重启服务器。
  • war :打包成 WAR 文件(部署首选)

    • 把整个项目打包成一个 .war 文件,方便复制到 Tomcat 的 webapps 目录,Tomcat 会自动解压运行。
      WAR 包部署(war)
  • 打包 :IDEA 把项目编译后的所有文件(.class、静态资源、配置文件等)压缩成一个 .war 包。这个包是一个完整的、可移植的部署单元。

  • 部署 :将 .war 文件复制到 Tomcat 的 webapps 目录。

  • 自动解压 :Tomcat 启动时(或检测到新文件时),会自动扫描 webapps 目录,发现 .war 文件后,将其解压为一个同名的文件夹。

  • 加载运行:Tomcat 把解压后的文件夹当作一个标准的 Web 应用,加载到服务器中运行。

  • 访问 :通过 http://localhost:8080/[war文件名] 访问,其中 [war文件名] 就是解压后的文件夹名。

解压式部署(war exploded)

  • 第一步:编译产物目录 IDEA 会把你写的 Java 代码编译成 .class 文件,把 HTML/JSP/JS 等静态资源、web.xml 等配置文件,统一放到一个临时目录 (默认在 IDEA 工作区的 out/target/ 下)。

  • 第二步:Tomcat 加载目录 IDEA 在启动 Tomcat 时,会通过 Tomcat 的 "虚拟部署" 机制,告诉 Tomcat:"不要读你的 webapps,去读我这个临时目录里的文件"。

  • 第三步:热更新机制你修改代码 / 资源后,IDEA 会实时重新编译(只编译修改的文件),并通知 Tomcat:"某个文件变了,你重新加载一下"。Tomcat 不用重启,只刷新变化的部分到内存。
    直接输出到 Tomcat/webapps

  • 配置输出路径 :在 IDEA 的部署配置中,将 war exploded 的输出目录手动指定为 Tomcat/webapps/[项目名]

  • 编译输出 :启动 Tomcat 或手动构建项目时,IDEA 会将编译后的所有文件直接写入到 webapps/[项目名] 文件夹中。

  • Tomcat 加载 :Tomcat 启动时,会像对待任何其他项目一样,扫描 webapps 目录,发现 [项目名] 文件夹并将其作为 Web 应用加载。

  • 热更新 :由于项目文件直接在 webapps 目录下,IDEA 修改代码后重新编译,文件会实时更新,Tomcat 可以检测到变化并进行热更新。
    这个idea创建webapplication的时候就自动会选择war exploded这个方式,如果想要选择其他方式,在这个位置选择项目配置

然后点击左侧的项目部署产物,可以看到是默认的这个,然后点击上方的加号

显示如下的部署选项


核心选项含义

  1. JAR
    • 打包成 .jar 文件,用于普通 Java 项目(非 Web),比如工具类、库、可执行 Java 程序。
  2. Web Application: Exploded
    • 就是你现在用的 war exploded,解压式 Web 部署产物,文件夹形态,支持热更新,开发首选
  3. Web Application: Archive
    • 打包成 .war 文件,是标准的 Java Web 部署包,正式环境 / 生产环境首选
  4. JavaEE Application: Exploded / Archive
    • 用于企业级 JavaEE 应用(包含 EJB、多个 Web 模块等),比普通 Web 项目更复杂,新手一般用不到。
  5. EJB Application: Exploded / Archive
    • 专门打包 EJB 组件(企业级 JavaBean),属于重型 JavaEE 技术,现在用得少了。
  6. 其他(dm Bundle、Android 等)
    • 对应其他技术栈或平台的产物,和你当前的 Tomcat Web 项目无关
      既然知道了tomcat可以直接运行webapps下的文件,那么怎末做呢

方式一、

tomcat会扫描webapps目录下的文件,创建了文件就直接当作项目运行,但是文件有标准的格式,否则不能被tomcat成功运行,项目结构如下所示
myproject/

├── index.jsp # 前端页面

├── css/ # 静态资源(非必须)

└── WEB-INF/(必须)

├── web.xml # 部署描述文件

├── classes/ # 编译后的Java类(系统生成,非手动创建)

└── lib/ # 项目依赖的jar包(如servlet-api.jar)(非必须)
方式二、

放 WAR 包(标准部署,适合生产环境)

  1. 准备 WAR 包
    • 可以用 IDEA 打包(之前的 Web Application: Archive),也可以用 Maven/Gradle 打包,甚至手动用压缩软件打包(改后缀为.war);
  2. 部署
    • myproject.war 复制到 Tomcat 的 webapps 目录下;
  3. 启动 Tomcat
    • Tomcat 会自动解压 myproject.warmyproject 文件夹,然后加载运行;
  4. 访问
    • 同样是 http://localhost:8080/myproject(WAR 包名就是访问路径)
      补充:怎末访问

http://localhost:8080/myproject

访问路径是http://电脑地址:端口号/项目名称

localhost指的是你的电脑,你的电脑有自己的ip,但是在自己电脑上部署的服务器,直接用localhost就可以访问,相当于"我家的xxx地址"就会默认在自己电脑

8080就是部署tomcat服务器时申请的端口号,申请的哪个就写哪个,然后是war包的名称,如果直接建立的文件夹就是文件夹的名称
在idea上的访问路径是什么,也是项目名称吗?

不是,看下图

Application context这个就是项目访问路径的意思
Tomcat 可以同时运行多个 Web 项目(比如 A 项目、B 项目、C 项目),Application context 就是给每个项目分配的「唯一门牌号码」------ 浏览器通过这个 "门牌",才能精准找到要访问的项目,不会和其他项目混淆。
tomcat文件的访问是有映射关系,root文件夹的文件映射为/会被优先访问

你做的操作 Tomcat 的映射规则 最终访问效果
文件放到 webapps/ROOT 自动映射为 Application context = / 访问 localhost:8080/文件名 就能打开
文件放到 webapps/myapp 自动映射为 Application context = /myapp 访问 localhost:8080/myapp/文件名

在这里写/,就是表示吧这个项目访问路径映射为/,tomcat访问的时候默认优先访问/的项目,不用写具体的项目名字就可以找到,也可以给这个起名字,比如写/exercise,就是这个项目的访问路径变成了http://localhost:8080/exercise

这个路径的名字是自己起的,和项目名称无关,就是把访问这个项目的路径命名

就是更加灵活,在idea创建的项目可以任意修改路径名称,但是直接在webapps下创建的就不行


tip:tomcat默认端口8080,如果已经下载解压了tomcat,点击启动tomcat,然后在浏览器中访问localhost:8080,就能到tomcat的页面
值得注意的是,如果你创建项目的时候在idea中把路径映射为/,那么默认份入欢迎界面就不会显示了,Tomcat 只会有一个「默认项目(Application context = /)」,新的项目会替换掉原有的默认项目资源

但是欢迎页面不会消失,如果想再次访问它,就需要输入完整的文件夹路径

http://localhost:8080/index.jsp

这个就可以看到了

现在所有的都已经弄好了

然后点开web.xml这个是项目的核心文件

在这个文件里面粘贴以下代码

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app
        version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xml="http://www.w3.org/XML/1998/namespace"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>

看到web.xml的图标变成了这样

就可以运行了,点击右上角运行按钮

结果如下图所示,果然和我们预想的一样,直接在根目录下,所以端口后面没有路径名字,然后端口是我们设置的8081,进入之后显示的也是在index.jsp上写的代码

相关推荐
隔壁小邓2 小时前
IDEA 中同时启动多个微服务
java·微服务·intellij-idea
Brookty2 小时前
网络通信核心:四元组、socket与IO机制详解
java·网络通信·网络入门
猿小猴子2 小时前
主流 AI IDE 之一的 华为云码道「CodeArts」 介绍
ide·人工智能·ai·华为云
佩奇大王2 小时前
P159 摆动序列
java·开发语言·算法
计算机学姐2 小时前
基于SpringBoot的网吧管理系统
java·spring boot·后端·spring·tomcat·intellij-idea·mybatis
Boop_wu2 小时前
[Java EE 进阶] SpringBoot 配置文件全解析:properties 与 yml 的使用(1)
java·spring boot·spring·java-ee
我不是秋秋2 小时前
软件开发项目各角色关系解析:产品/前后端/测试如何高效协作?
java·算法·面试·职场和发展·哈希算法
青衫客362 小时前
浅谈 Java 后端对象映射:从 JSON → VO → Entity 的原理与实践
java·json
大阿明10 小时前
Spring Boot(快速上手)
java·spring boot·后端