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

javaWeb02-Tomcat

一、Tomcat与spring、springboot项目的关系 

Spring Boot项目默认集成了内嵌的 Tomcat 服务器:

  • Spring Boot 提供了内嵌式 Servlet 容器,默认使用 Tomcat

  • 启动类的 main() 方法运行时,Tomcat 就会随应用一起启动,监听端口(默认 8080)。

  • 不需要单独安装或部署到外部 Tomcat,直接打包为 jar 文件就能运行。

如果你用的是传统 Spring Framework + Web 项目结构(如 web.xml): 

不会默认集成 Tomcat,需要自己部署到外部 Tomcat 容器中。

  • 你通常会将 Spring 项目打成 war 包。

  • 然后将这个 war 放进本地安装的 Tomcat 的 webapps 目录里运行。

  • Spring 自身并不提供内嵌的 Tomcat,这点和 Spring Boot 是本质区别。

项目类型是否默认集成 Tomcat部署方式
Spring Boot✅ 是(默认内嵌)java -jar 运行 jar 文件即可
Spring Framework(传统)❌ 否手动部署 war 到 Tomcat

二、tomcat常用版本

场景推荐版本
传统 Spring 或 Spring Boot 2.x 项目Tomcat 9.x
新项目,使用 Spring Boot 3.x / Spring 6.x,支持 Jakarta EETomcat 10.x
老旧系统维护可保留 Tomcat 8.5(不推荐新项目)

三、tomcat基本使用

打开浏览器访问:http://localhost:8080

四、tomcat的基本配置

 

五、创建maven web项目

5-1、使用idea创建maven web项目(使用骨架)

选择的骨架如下:

【注意】:

只有当idea BUILD SUCCESS,才会出现webapp文件夹!

此处的文件夹目录结构:

少了Java文件夹和resources资源文件夹,需要手动创建。

其实在创建的时候,idea会有提示:

完整目录结构如下:

.
├── pom.xml
└── src└── main├── java├── resources└── webapp├── WEB-INF│   └── web.xml└── index.jsp

 此时pom.xml文件中有较多的插件信息,可以都删除,删除的干净版本可以是这样:

【注意】:

此方式对maven的版本有要求,要是使用的idea版本较低,里面默认的maven版本也比较低,创建的maven web项目会不成功。

此时,可以使用直接新建maven项目,然后手动添加对应的文件夹,使其成为web项目。要记得手动在pom.xml文件中加上:

<packaging>war</packaging>

5-2、WEB-INF 文件夹

WEB-INF 是 Java Web 项目中特殊的目录,只有服务器可以访问,浏览器访问不到

为什么 WEB-INF 是“受保护的”?

Tomcat 会自动屏蔽对 WEB-INF/ 的外部访问,这种机制用于保护敏感文件,如:

  • 配置文件(web.xml)

  • 后台页面(admin.jsp)

  • 控制类(Servlet)

  • 第三方依赖包(lib)

WEB-INF 中不能放什么?

不推荐放的内容原因说明
JSP 页面(若需用户直接访问)浏览器访问不到,除非作为 include 或 forward 使用
图片、CSS、JS 文件因为无法被浏览器直接加载
外部可见资源(xxx.html)例如首页、公开页面应放在 WEB-INF 外面

5-3、idea集成tomcat:pom.xml添加tomcat插件

插件版本必须对应 Tomcat 版本!!!

如果你不确定使用哪个插件版本,可以统一使用 tomcat7-maven-plugin 来跑本地开发:

<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/springWeb</path></configuration>
</plugin>

http://www.dtcms.com/a/265058.html

相关文章:

  • java.sql.SQLSyntaxErrorException: Unknown column ‘user_name‘ in ‘field list‘
  • YOLOv11剪枝与量化(一)模型压缩的必要性
  • Qt写入excel
  • 整流电路Multisim电路仿真实验汇总——硬件工程师笔记
  • Rust实现FasterR-CNN目标检测全流程
  • 教程:国内如何免费用Claude4+GPT4o生成高质量科研绘图
  • vue动态绑定样式
  • Kalibr解毒填坑(一):相机标定失败
  • 408第三季part1 - 操作系统 - 文件基本概念
  • 基于STM32的土豆种植自动化灌溉系统设计与实现
  • java依赖注入方法
  • 【C语言】知识总结·文件操作
  • Redis在项目中的使用
  • 在移动端使用 Tailwind CSS (uniapp)
  • 在项目架构时,如何选择打包构建工具?
  • Nginx、Spring Cloud Gateway 与 Higress 的应用场景及核心区别
  • Linux基本命令篇 —— alias命令
  • AI专业化应用加速落地,安全治理挑战同步凸显
  • 车载软件架构 -- SOA服务分层设计原则
  • 数学建模_非线性规划
  • 时钟(6.25-26)
  • pppoe宽带连接-系列命令调用
  • 使用Process Monitor定位benchstat工具执行过程
  • Almalinux_10.0下MySQL的多表操作与函数使用
  • 智慧城市的安全密码:商用密码如何守护万物互联?
  • 鸿蒙自定义相机的拍照页面
  • 荧光原位杂交(FISH)-实验操作-011
  • LeetCode[617]合并二叉树
  • 从SEO到GEO:AI时代的品牌大模型种草与数字营销重构
  • 【记录】基于 C++ 和 Winsock 的简单 TCP 通信实现