很多刚入行 Java 的朋友,竟然不知道 Tomcat?

科技   2024-08-31 18:15   上海  

“Tomcat 是什么?”

“我呀,没听说过!

几天有个弟弟不知道从哪儿搞来一个开源项目,正好满足他的需求。但是项目用的是 Spring ,而不是 Spring Boot。

然后问我说项目不知道咋启动,当然,我只告诉他装个 Tomcat 配置上就行了。他甚至从来没碰过 Tomcat,只是听过,连 Tomcat 都没下载过。具体没有告诉他,而是让他自己去查了。因为我也好几年没碰过纯 Spring Framework 了,一直都是用 Spring Boot。

想想也是,自从用了 Spring Boot 后,确实就不关心 Tomcat 了。Spring Boot 项目一创建,直接哐哐写代码,然后一点按钮就运行,一点按钮就调试。等到部署的时候,都有自动部署流程,直接 Jenkins 一键部署了。从头到尾也接触不到 Tomcat,或者说没有直接接触 Tomcat。

因为Spring Boot 默认就是使用 Tomcat 作为 Servlet 容器和 Web 服务器。它就是在 spring-boot-starter-web 这个包里被引入的。

所以说,有很多刚刚入行 Java 的或者入行 2、3 年的同学根本就没了解过 Tomcat 是啥。

Java Web 从最初的 Servlet 和 JSP,到 Spring 框架的兴起,再到如今大行其道的Spring Boot,每一次变革都带来了开发效率的提升。但在提高效率的同时,很多底层的技术也被封装得严严实实的。

Tomcat

Apache Tomcat是一个开源的 Java Servlet容器和Web服务器。它实现了Java Servlet、JavaServer Pages (JSP)、Java Expression Language和Java WebSocket技术的规范。目前 Tomcat 11 beta 版已经发布了。

Tomcat有下面几个核心功能

  • Servlet容器:Tomcat为Servlet提供运行环境,处理Servlet的生命周期。

  • Web服务器:能够处理HTTP请求,提供静态资源。

  • JSP引擎:将JSP编译成Servlet并执行。

如果不用 Spring ,也不用 Spring Boot ,就用老手艺 Servlet 的话,创建一个可以跑起来的项目很简单。相信很多人都没这么做过,我也也是刚学 Java 的时候用过一点点,后来就用 Spring 了。

1、创建一个Servlet

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("Hello, Tomcat!");
    }
}

2、配置 web.xml

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

后来 Spring 框架就出来了,Spring 一来,基本上所有的 Java Web 全都使用它了。

用 Spring 就方便多了,很多细节都不用关心了,配置配置 XML 文件就行了。但是你想要把项目跑起来,还是要自己安装 Tomcat 的。用 Spring 的话呢,还要考虑是构建 Jar 包,还是 War 包。

说到这儿,还有很多同学根本就没见过 War 包。

再后来 Spring Boot 就出现了,彻底让 Java Web 开发进入了一个新时代。它的设计理念是"约定优于配置",通过自动配置大幅减少了开发者的工作量。

作为一个开发者,创建完一个 Spring Boot 项目后,接下来就是安心写代码了,什么 Jar 包、War 包,什么 Tomcat 通通都不用关心了。

虽然不用关心甚至有的同学根本就不知道 Tomcat,但是其实我们每天都在用它,因因为它是 Spring Boot 默认内嵌的。

Spring Boot会自动配置Tomcat,无需开发者手动设置。我们只管写代码,运行调试就行了。

实际上在 Spring Boot 中,也可以启用 Tomcat 之外的 Java Web 服务,比如 Jetty 或Undertow。虽然一般情况下我们不需要这么做。

比如要使用 Jetty 作为内嵌 Web 服务。

首先要把默认引入的 Tomcat 排除掉。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 <exclusions>
  <exclusion>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
  </exclusion>
 </exclusions>
</dependency>

然后将 Jetty 引入就可以了。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>


看这篇文章的小伙伴,你对 Tomcat 的了解有多少呢?最后再给大家抛一个经典面试题,可以挑战一下:



往期推荐

25 届秋招面试热题来啦!百发百中

鱼皮的原创项目,已超过 10 个!

咸鱼代写代码的都是什么人?真的能有收入么?

25届秋招,我们出成果了!

25 届秋招真的回暖了?说这句话的都是哪些人

自我介绍,这样写毫无意义

鱼皮的大学简历,仅供参考

程序员鱼皮
一手科技热点和编程干货 | 免费编程学习网 code-nav.cn
 最新文章