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

Java基础面试题15:简述什么是 Servlet?

Servlet 是什么?

Servlet 是 Server Applet 的缩写,翻译过来就是“服务器端的小程序”。尽管被称作“小程序”,它的功能却一点也不小,因为 Servlet 是基于 Java 技术的,Java 能做的事情,Servlet 基本上都能做到。

举个例子,Servlet 可以用来处理 HTTP 请求、访问数据库、生成 HTML 页面等。也就是说,用 Servlet,你几乎可以用 Java 开发整个动态网站。

为什么需要 Servlet?

最开始,虽然 Java 很强大,但直接用原生 Java 写动态网站是件“折磨人”的事情。为什么?

  • 你得自己解析 HTTP 请求报头。
  • 自己分析用户的请求参数。
  • 自己加载数据库组件。

这些基础性、重复性又麻烦的工作浪费了开发者的时间和精力。

为了解决这个问题,Java 官方推出了 Servlet 技术。它把开发动态网站所需的原生 Java 功能封装成了一套简单易用的 API,称为 Servlet API

用 Servlet 开发网站就简单多了。开发者只需要关注业务逻辑,不再为基础功能的实现操心。


Servlet 的优势

  • 强大:基于 Java,几乎能调用所有 Java API。
  • 适用范围广:适合企业级开发,能处理高并发、大吞吐量的场景。
  • 方便:封装了许多底层功能,大大简化开发流程。

简单来说,Servlet 就是 Sun 公司(现在的 Oracle)推出的一种基于 Java 的动态网站开发技术。只要按 Servlet 规范写代码,就能开发网站。


Servlet 是一种规范

严格意义上,Servlet 其实是 Java Web 开发的一种规范,也可以理解为一套技术标准。规范本身并不能“跑起来”,它只是说清楚了应该怎么做,需要有人去实现它。

比如,Servlet 规范提到了接口、方法、功能等,具体的代码实现交给了各种“Servlet 容器”去完成。

什么是 Servlet 容器?

Servlet 容器是专门用来管理 Servlet 程序的服务器,比如:

  • Tomcat(最常见的开源 Servlet 容器)
  • Weblogic、Jetty、Jboss、WebSphere 等

你可以理解为,Servlet 容器负责帮你运行 Servlet 类,让它们为网站服务。


Servlet 接口

所有 Servlet 的功能都通过一个名为 Servlet 的接口提供。想写一个 Servlet 程序,可以直接实现这个接口,比如:

public class ServletDemo implements Servlet {
    // TODO: 实现接口方法
}

但直接实现 Servlet 接口会比较繁琐,需要写很多方法。为此,Servlet 规范还提供了两个常用的抽象类:

  • GenericServlet
  • HttpServlet

其中,HttpServlet 更加方便,所以大多数情况下我们直接继承 HttpServlet 来编写 Servlet 程序。


JSP:Servlet 的升级版

最初,Servlet 是 Java 的第一代 Web 开发技术,但它有个很大的缺点:需要把 HTML 代码写成字符串输出,非常麻烦。比如:

out.println("<html><body>这是HTML</body></html>");

为了解决这个问题,Java 又推出了第二代 Web 开发技术——JSP。JSP 可以直接在 HTML 文档中嵌入 Java 代码,大大提升了开发效率。

JSP 和 Servlet 的关系

  • JSP 是基于 Servlet 的:访问 JSP 页面时,JSP 代码会被翻译成 Servlet,然后再执行。所以,最终 HTML 还是通过字符串输出的。
  • JSP 更适合现代开发:JSP 更友好,让 HTML 和代码分离,维护起来更方便。
  • Servlet 是 JSP 的基础:JSP 本质上就是对 Servlet 的进一步封装。

所以,尽管现在很少直接用 Servlet 开发动态网站,但理解 Servlet 对学习和使用 JSP 依然非常重要。


总结

  1. Servlet 是基于 Java 的动态网站开发技术。
  2. 它封装了许多底层功能,让开发者可以专注于业务逻辑。
  3. Servlet 是一种规范,需要依托 Servlet 容器运行,比如 Tomcat。
  4. JSP 是 Servlet 的升级版,用起来更简单,但本质上还是基于 Servlet。

学习 Servlet,不仅能让你理解 JSP 的运行原理,还能帮你夯实 Java Web 开发的基础!

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的
7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!


http://www.kler.cn/a/421641.html

相关文章:

  • 活着就好20411205
  • 11.爬虫
  • 【RDMA】RDMA read和write编程实例(verbs API)
  • Ubuntu22.04系统源码编译OpenCV 4.10.0(包含opencv_contrib)
  • matlab中disp,fprintf,sprintf,display,dlmwrite输出函数之间的区别
  • 实例分割模型的数据集格式转换
  • MATLAB —— 机械臂工作空间,可达性分析
  • 浏览器的事件循环机制
  • 电池SOH预测模型 | 基于VAE—BiGRU变分自编码器结合深度学习模型(Python/Matlab)
  • Python实现网站资源批量下载【可转成exe程序运行】
  • 计算机网络常见面试题总结(上)
  • KAN-Transfomer——基于新型神经网络KAN的时间序列预测
  • 基于Java Springboot校园论坛APP且微信小程序
  • Go学习笔记之数据类型转换
  • 基于OpenCV的拆分和合并图像通道实验案例分享_基于RK3568教学实验箱
  • 权限提升漏洞之Netlogon协议详解 以及可能出现得漏洞分析
  • 【035】基于51单片机俄罗斯方块游戏机【Proteus仿真+Keil程序+报告+原理图】
  • Scala模拟匹配
  • 怎么做DNS污染检测
  • 【docker】Dockerfile指令讲解,与企业案例应用
  • 数据结构自测5
  • java垃圾回收机制介绍
  • linux模拟试题
  • Seatunnel解决ftp读取json文件无法读取数组以及格式化之后的json无法解析的问题
  • TypeScript和JavaScript的区别
  • 如何使用brew安装phpredis扩展?