Servlet 和 Tomcat 是 Java Web 开发的 "黄金搭档"------Servlet 是处理网页请求的 Java 程序核心,Tomcat 是运行 Servlet 的服务器,二者配合才能让 Java 写的网页能被浏览器访问。下面用通俗的方式讲清它们的关系、核心用法和实战要点:
一、先搞懂:Servlet 是啥?Tomcat 又是啥?
1. Servlet:Java 写的 "网页请求处理员"
你可以把 Servlet 理解成 "专门处理浏览器请求的 Java 类"。比如用户在浏览器输入网址、点击按钮提交表单,这些请求不会直接找数据库,而是先交给 Servlet:
- 它接收浏览器的请求数据(比如登录的账号密码);
- 调用 Java 业务代码(比如验证账号、查数据库);
- 生成响应内容(比如登录成功 / 失败的页面),再返回给浏览器。
Servlet 本身不是独立运行的程序,它需要 "容器" 来托管 ------ 这个容器就是 Tomcat(也叫 Servlet 容器),没有 Tomcat,Servlet 就是一堆没法执行的代码。
2. Tomcat:运行 Servlet 的 "服务器管家"
Tomcat 是 Apache 基金会的开源轻量级服务器,核心作用就是 "伺候" Servlet:
- 监听电脑的端口(默认 8080),接收浏览器发来的请求;
- 把请求转交给对应的 Servlet 处理;
- 把 Servlet 的处理结果返回给浏览器;
- 还能管理 Servlet 的生命周期(创建、运行、销毁),不用开发者手动管。
简单说:Servlet 是 "办事的人",Tomcat 是 "给人提供办公场地和对接外部的管家"。
二、Servlet 的核心工作流程(白话版)
- 浏览器输入网址(比如
http://localhost:8080/MyWeb/LoginServlet),向 Tomcat 发请求; - Tomcat 解析网址,找到对应的 Servlet 类(比如 LoginServlet);
- Tomcat 实例化这个 Servlet,调用它的
service()方法(核心方法); - Servlet 在
service()里处理请求:比如获取账号密码,调用工具类查数据库; - Servlet 生成响应内容(比如 HTML 页面、JSON 数据),通过
response对象传给 Tomcat; - Tomcat 把响应内容转成浏览器能识别的格式,返回给用户。
三、Tomcat 怎么 "管理" Servlet?
1. Tomcat 的核心目录(新手必认)
下载安装 Tomcat 后,关键目录要分清:
| 目录名 | 作用 |
|---|---|
| bin | 启动 / 关闭 Tomcat 的脚本(windows 点 startup.bat,linux 点 startup.sh) |
| webapps | 存放 Java Web 项目的地方(把写好的项目包扔这,Tomcat 启动后就能访问) |
| conf | 配置文件目录(比如改端口、设置用户权限,改 server.xml 就行) |
| logs | 日志文件(项目运行报错了,看这里的日志找问题) |
| webapps/ROOT | 默认访问目录(直接输 localhost:8080 就访问这里的页面) |
2. Servlet 注册与访问(实战关键)
早期写 Servlet 要在 web.xml 里注册(告诉 Tomcat 哪个网址对应哪个 Servlet),现在用注解更简单:
步骤 1:写一个 Servlet 类
java
运行
// 注解:告诉 Tomcat,访问 /hello 就找这个 Servlet
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
// 处理 GET 请求(浏览器直接访问就是 GET)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置响应的编码,避免中文乱码
resp.setContentType("text/html;charset=utf-8");
// 向浏览器输出内容
resp.getWriter().write("你好,这是 Servlet 处理的响应!");
}
}
步骤 2:打包部署到 Tomcat
- 把写好的 Servlet 项目打成 WAR 包(Java Web 项目的标准包);
- 把 WAR 包复制到 Tomcat 的
webapps目录; - 启动 Tomcat(双击 bin/startup.bat);
- 浏览器输入
http://localhost:8080/项目名/hello,就能看到 Servlet 输出的内容。
四、Servlet 与 Tomcat 的核心知识点(避坑关键)
1. Servlet 的生命周期(Tomcat 说了算)
- 初始化 :第一次访问 Servlet 时,Tomcat 调用
init()方法(只执行一次); - 处理请求 :每次访问都调用
service()方法(实际执行的是 doGet/doPost); - 销毁 :Tomcat 关闭时,调用
destroy()方法(释放资源)。
2. 常见坑点与解决
-
端口被占用 :Tomcat 默认 8080 端口,若提示 "8080 被占用",改 conf/server.xml 里的
<Connector port="8081" ...>换端口; -
中文乱码 :必须同时设置请求和响应编码:
java
运行
// 请求编码(处理前端传过来的中文) req.setCharacterEncoding("utf-8"); // 响应编码(返回给浏览器的中文) resp.setContentType("text/html;charset=utf-8"); -
404 错误:要么网址输错,要么项目没放对 webapps 目录,要么 Servlet 注解的路径写错;
-
500 错误:Servlet 代码报错(比如空指针),看 Tomcat 的 logs 目录下的 catalina.out 日志找问题。
3. Tomcat 启动与关闭
- 启动 :Windows 双击 bin/startup.bat,Linux 执行
./startup.sh; - 关闭 :Windows 双击 bin/shutdown.bat,Linux 执行
./shutdown.sh; - 启动后能访问
http://localhost:8080看到 Tomcat 首页,说明启动成功。
五、总结
Servlet 是 Java Web 处理请求的核心逻辑载体,Tomcat 是运行 Servlet 的容器和服务器,二者缺一不可:
- 写 Servlet 就是写处理请求的 Java 类,重点重写 doGet/doPost 处理不同请求;
- 用 Tomcat 部署 Servlet 项目,核心是把 WAR 包放 webapps,启动后通过端口访问;
- 新手先搞定 "写简单 Servlet + 部署到 Tomcat + 解决乱码 / 404",再深入学习会话管理、过滤器等进阶内容。