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

Java Web 之 Tomcat 100问

Tomcat 是什么?

Tomcat 是一个开源的 Java Servlet 容器和 Web 容器

Tomcat 的主要功能有哪些?

三大主要功能:

  1. 运行 Java Web 应用。
  2. 处理 HTTP 请求。
  3. 管理 Web 应用。

如何安装 Tomcat ?

  1. 下载 Tomcat 安装包(Apache Tomcat 官网:https://tomcat.apache.org)。
  2. 解压到指定目录。
  3. 配置环境变量(如 CATALINA_HOME)。
  4. 启动 Tomcat:
    • Windows: 运行 bin/startup.bat
    • Linux/macOS: 运行 bin/startup.sh
    • 注意:启动tomcat时如果出现乱码,修改日志配置logging.properties文件中的参数java.logging.ConsoleHandler.encoding即可。
  5. 访问 http://localhost:8080 验证是否启动成功。
  6. 关闭Tomcat:运行shutdown.bat文件。

如何在 Tomcat 中部署 Web 应用?

示例:部署一个简单的 Web 应用

创建一个简单的 Servlet:

继承HttpServlet,并实现其中的doGet方法。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;public class HelloServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html><body>");out.println("<h1>Hello, Tomcat!</h1>");out.println("</body></html>");}
}

编译 Servlet 并将其放入 WEB-INF/classes 目录。

创建 web.xml 文件配置 Servlet:

<web-app><servlet><servlet-name>HelloServlet</servlet-name><servlet-class>HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>

将应用打包为 WAR 文件或直接复制到 Tomcat 的 webapps 目录。

启动 Tomcat 并访问 http://localhost:8080/your-app/hello

war 模式和 war exploded 模式有什么区别?

在Java Web开发中(特别是使用IDEA或Eclipse等IDE部署到Tomcat时),会遇到WAR模式WAR Exploded模式两种不同的部署方式。

WAR 模式(打包模式)WAR Exploded(展开模式)
热更新不支持支持
特点将项目编译后打包成一个标准的 .war 文件(如 myapp.war),部署时服务器会自动解压到其工作目录(如Tomcat的 webapps 目录)。直接将项目的编译结果以目录结构展开(未压缩),部署到服务器。
是否压缩文件压缩(ZIP格式)未压缩
部署速度比WAR Exploded模式更快。文件以目录形式存在,部署速度略慢于WAR模式。
调试便利性

建议:

  1. 开发阶段使用WAR Exploded模式
    • 使用 WAR Exploded,利用热更新提高开发效率。
    • 在IDEA中配置Tomcat时,选择 Deploy as exploded war
  2. 生产阶段使用WAR 模式
    • 使用 WAR模式,通过CI/CD工具生成 .war 文件后部署。

IDEA中,如何启动 Tomcat 热部署?

Tomcat的热部署机制

  • 对于Exploded模式,Tomcat会监控 WEB-INF/classesWEB-INF/lib 的变化,但默认不自动重载Java类(需配置reloadable="true"或使用JRebel)。

IDEA中的配置

<!-- 在Tomcat的 context.xml 中 -->
<Context reloadable="true" path="/myapp"/>

开启后,Tomcat会检测变更并自动重启应用(影响性能,慎用于生产环境)。

http://www.xdnf.cn/news/32437.html

相关文章:

  • git合并分支并推送
  • 为什么浮点数会搞出Infinity和NAN两种类型?浮点数的底层原理?IEEE 754标准揭秘?
  • matlab 环形单层柱状图
  • 解锁异步JavaScript性能:从事件循环(Event Loop)到Promise与Async/Await的最佳实践
  • 电商平台计算订单成交额是不是要去除退款退货的
  • CMFA在自动驾驶中的应用案例
  • 多线程使用——线程安全、线程同步
  • 【Canvas与旗帜】标准英国米字旗
  • 实现批量图片文字识别(python+flask+EasyOCR)
  • 系统架构设计师:计算机组成与体系结构(如CPU、存储系统、I/O系统)案例分析与简答题、详细解析与评分要点
  • 【C++动态规划】2801. 统计范围内的步进数字数目|2367
  • 洛谷P1177【模板】排序:十种排序算法全解(2)
  • Docker安装与介绍(一)
  • 【工具变量】A股上市公司信息披露质量KV指数测算数据集(含do代码 1991-2024年)
  • 青少年编程与数学 02-016 Python数据结构与算法 29课题、自然语言处理算法
  • 黑马Java基础笔记-1
  • 计算机网络——常见的网络攻击手段
  • 面试题之如何设计一个秒杀系统?
  • 编程语言基础 - C++ 面试题
  • jenkins尾随命令
  • word选中所有的表格——宏
  • ETF价格相关性计算算法深度分析
  • Java Stream 复杂场景排序与分组技术解析与示例代码
  • 蓝桥杯 蜗牛 动态规划
  • 遨游科普:防爆平板是指什么?有哪些应用场景?
  • 使用vue2技术写了一个纯前端的静态网站商城-鲜花销售商城
  • javassist
  • Python concurrent.futures模块的ProcessPoolExecutor, ThreadPoolExecutor类介绍
  • 在 Node.js 中使用原生 `http` 模块,获取请求的各个部分:**请求行、请求头、请求体、请求路径、查询字符串** 等内容
  • Python爬虫实战:获取网易新闻数据