Tomcat&Servlet
# 一、Web 相关概念回顾
# 1. 软件架构
- C/S:客户端 / 服务器端
- B/S:浏览器 / 服务器端
# 2. 资源分类
- 静态资源:所有用户访问后,得到的结果一致。
- 如:HTML、CSS、JavaScript
- 动态资源:每个用户访问相同资源后,结果可能不同。访问后需转为静态资源再返回浏览器。
- 如:Servlet/JSP、PHP、ASP 等
# 3. 网络通信三要素
IP:计算机在网络中的唯一标识。
端口号:应用程序在计算机中的唯一标识(0~65536)。
传输协议:
- TCP:安全、三次握手、速度较慢。
- UDP:不安全、速度快。
# 二、Web 服务器软件
# 1. 基本概念
- 服务器:安装了服务器软件的计算机
- 服务器软件:接收、处理请求并响应
- Web 服务器软件:能部署 Web 项目供用户访问
- Web 容器:可运行 Java Web 应用的环境
# 2. 常见 Java Web 服务器软件
| 名称 | 公司/组织 | 特点 | 费用 |
|---|---|---|---|
| WebLogic | Oracle | 支持 JavaEE 全规范 | 商业收费 |
| WebSphere | IBM | 支持 JavaEE 全规范 | 商业收费 |
| JBOSS | JBOSS | 支持 JavaEE 全规范 | 商业收费 |
| Tomcat | Apache 基金 | 支持 Servlet/JSP,开源免费 | 免费 |
- JavaEE:Java 在企业级开发中的规范集合(共 13 项规范)
# 三、Tomcat 使用指南
# 1. 下载与安装
- 官网:http://tomcat.apache.org/ (opens new window)
- 安装:解压即可(路径中避免中文或空格)
- 卸载:直接删除目录
# 2. 启动与访问
- 启动:
bin/startup.bat
- 访问:
- 本地:http://localhost:8080 (opens new window)
- 远程:http://<IP地址>:8080
# 3. 常见问题
# 启动黑窗口一闪而过
- 原因:JAVA_HOME 未配置
- 解决:正确配置 JAVA_HOME 环境变量
# 启动端口冲突报错
- 方法一(暴力):杀掉端口占用进程
netstat -ano
方法二(温柔):修改端口号
修改 conf/server.xml:
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8445" />
- 常用端口:80(HTTP 默认端口)
# 4. 停止 Tomcat
正常关闭:
- bin/shutdown.bat
- 控制台 Ctrl + C
强制关闭:
- 点击关闭按钮 ×
# 5. 项目部署方式
# 方法一:直接放入 webapps目录**
- 项目访问路径:/项目名
- 简化部署方式:将项目打包为 .war 包放入 webapps,自动解压
# 方法二:修改server.xml
<Host>
<Context docBase="D:\hello" path="/hehe" />
</Host>
- docBase:项目实际路径
- path:虚拟路径
# 方法三:在conf/Catalina/localhost下创建 XML 文件
<Context docBase="D:\hello" />
- 虚拟路径为 XML 文件名
# 四、Java Web 项目目录结构
项目根目录
├── WEB-INF/
│ ├── web.xml # 核心配置文件
│ ├── classes/ # 编译后的字节码
│ └── lib/ # 项目依赖的 jar 包
WEB-INF 目录下内容浏览器无法直接访问
# 五、Servlet 入门
# 1. 概念
- Servlet:运行在服务器上的小程序
- 是一个接口,用于定义类被 Web 容器调用的规则
# 2. 快速入门步骤
- 创建 JavaEE 项目
- 创建类实现 Servlet 接口
public class ServletDemo1 implements Servlet { ... }
实现接口方法
配置 web.xml 文件:
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
# 3. Servlet 执行原理
- 浏览器请求到达服务器
- Tomcat 解析 URL → 查找 <url-pattern>
- 找到对应 <servlet-class> → 加载类并创建对象
- 调用 Servlet 方法处理请求
# 4. Servlet 生命周期方法
| 生命周期方法 | 说明 |
|---|---|
| init() | 初始化方法,只执行一次 |
| service() | 提供服务,每次请求都会执行 |
| destroy() | 销毁方法,服务器关闭时调用一次 |
# 创建时机
- <load-on-startup> 配置:
- 负数:第一次访问时创建(默认)
- 0 或正整数:服务器启动时创建
Servlet 是单例的,多线程访问可能造成线程安全问题。避免使用成员变量或避免修改其值。
# 六、Servlet 3.0 注解配置
无需配置 web.xml,使用注解即可:
# 示例:
@WebServlet("/demo1")
public class MyServlet implements Servlet {
...
}
# 注解说明(@WebServlet)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
String name() default ""; // 相当于 <servlet-name>
String[] value() default {}; // urlPatterns 的简写
String[] urlPatterns() default {}; // 相当于 <url-pattern>
int loadOnStartup() default -1;
WebInitParam[] initParams() default {};
boolean asyncSupported() default false;
String smallIcon() default "";
String largeIcon() default "";
String description() default "";
String displayName() default "";
}
# 七、IDEA 与 Tomcat 配置
- IDEA 为每个 Tomcat 项目生成独立配置
- 日志中可见:
Using CATALINA_BASE: "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast"
- Tomcat 部署项目 vs 工作空间项目
- 实际运行的是 Tomcat 部署的 Web 项目目录
- WEB-INF 中内容无法被浏览器直接访问
- 调试方式
- 使用小虫子图标启动 Debug 模式进行断点调试
上次更新: 2025/07/23, 01:37:33