| 概念 | 本质 | 典型代表 |
|---|---|---|
| 静态资源 | 内容固定,服务器不做任何处理直接返回 | HTML、CSS、JS、图片、字体 |
| 动态资源 | 服务器执行代码生成内容(最终输出仍是静态资源) | JSP、Servlet、Controller 返回 JSON/HTML |
| Java EE / Jakarta EE | 13+ 项企业级开发规范集合 | Servlet、JSP、JPA、CDI、JAX-RS、WebSocket... |
| Web 容器 | 实现 Servlet/JSP 规范的服务器程序 | Tomcat、Jetty、Undertow、Resin |
| 应用服务器 | 实现全量 Java EE 规范 | WildFly、GlassFish、WebLogic、WebSphere |
包名识别技巧:java.* → Java SE 核心库;javax.* / jakarta.* → Java EE/Jakarta EE 规范 API。
tar.gz/zip),解压至**无中文、无空格**路径。bin/startup.sh (Linux/Mac) 或 bin/startup.bat (Windows)。https://localhost:8080 出现 Tomcat 猫页即成功。| 现象 | 原因 | 解决 |
|---|---|---|
| 黑框一闪而过 | JAVA_HOME 未配置或指向 JRE 而非 JDK | 配置系统环境变量 JAVA_HOME=C:\jdk1.8.0_xxx,Path 追加 %JAVA_HOME%\bin |
| 端口 8080 被占用 | 其他程序占用、或 Tomcat 重复启动 | netstat -ano | findstr 8080 找 PID 杀进程,或改 server.xml Connector port |
| 中文乱码 | Tomcat 默认 ISO-8859-1 解码 GET 参数 | server.xml Connector 加 URIEncoding="UTF-8" |
apache-tomcat-x.x.x/
├── bin/ # 启动/关闭脚本、Tomcat 自带工具
├── conf/ # 核心配置:server.xml, web.xml, context.xml, tomcat-users.xml
├── lib/ # 容器级共享 JAR(servlet-api.jar, jsp-api.jar 等)
├── logs/ # 运行日志(catalina.out, localhost.xxx.log, access_log)
├── temp/ # 临时文件(文件上传缓存、JSP 编译中间文件)
├── webapps/ # 应用部署目录(每个子目录或 WAR 包 = 一个 Web 应用)
└── work/ # 工作目录:JSP 编译生成的 Servlet 源码/Class 文件
MyApp/ ← 应用根目录(Context Root)
├── index.html ← 静态资源直接放根或子目录
├── css/, js/, images/
└── WEB-INF/ ← 安全目录,客户端**无法直接访问**
├── web.xml ← 部署描述符(Servlet 3.0+ 可选,注解替代)
├── classes/ ← 编译后的 Java 类(包结构对应目录)
│ └── com/example/MyServlet.class
└── lib/ ← 应用私有 JAR(仅本应用可见)
类加载优先级:WEB-INF/classes → WEB-INF/lib/*.jar → Tomcat/lib/*.jar → 父加载器。避免版本冲突核心原则:**应用私有库优先,不依赖容器共享库**。
MyApp 目录到 webapps/。jar -cvf MyApp.war *(在应用根目录执行),拷贝 MyApp.war 到 webapps/,Tomcat 自动解压。conf/Catalina/localhost/MyApp.xml 写 <Context docBase="/data/apps/MyApp" />,应用可置于任意路径,不污染 webapps。Connector port="8080" protocol="HTTP/1.1"Connector port="8009" protocol="AJP/1.3"(Nginx 反代常用)keystoreFile、keystorePass、SSLEnabled="true"<Engine name="Catalina" defaultHost="localhost">
<Host name="www.example.com" appBase="/data/apps/www">
<Context path="/api" docBase="api-app" />
</Host>
<Host name="admin.example.com" appBase="/data/apps/admin">
<Context path="" docBase="admin-app" />
</Host>
</Engine>
path 与物理路径 docBase 映射。将磁盘任意目录映射为 Web 访问路径:
server.xml 中 <Context path="/static" docBase="D:/cdn/resources" />(需重启)conf/Catalina/localhost/static.xml:<Context docBase="D:/cdn/resources" />(热生效,推荐)server.xml Connector port="80"(生产建议 Nginx 反代)。conf/Catalina/localhost/ROOT.xml → <Context docBase="/data/apps/main" />。WEB-INF/web.xml 配置 <welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list>。keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks 自签名。Connector 加 SSLEnabled="true" scheme="https" secure="true" keystoreFile="..." keystorePass="..."。Java Web 基础看似琐碎,实则是构建高性能、可维护系统的地基。搞清静态/动态边界、容器与规范关系、标准目录约定、部署方式优劣、核心组件分层,配合 Tomcat 实战调优,便能从“能跑通”进阶到“懂原理、会调优、敢上生产”。