1. 首页 > Tomcat教程 > 正文

Tomcat教程FG004-第一个Web应用开发与Tomcat部署实战(含目录结构解析)

目录大纲

Part01-基础概念与理论知识

1.1 Web应用基本概念

Web应用是基于Java Servlet技术的应用程序,运行在Web容器(如Tomcat)中,主要特点包括:

  • 遵循Servlet规范
  • 包含多个组件:Servlet、JSP、过滤器、监听器等
  • 以WAR(Web Application Archive)包形式部署
  • 具有特定的目录结构

1.2 Web应用目录结构

标准Web应用目录结构:

# Web应用目录结构
webapp/ # 应用根目录
├── WEB-INF/ # 受保护的目录,浏览器无法直接访问
│ ├── classes/ # 编译后的Java类文件
│ ├── lib/ # 依赖的JAR包
│ └── web.xml # 部署描述符
├── META-INF/ # 元数据目录
├── index.html # 首页
└── resources/ # 静态资源(CSS、JS、图片等)

1.3 部署描述符web.xml

web.xml是Web应用的部署描述符,用于配置:

  • Servlet映射
  • 过滤器配置
  • 监听器配置
  • 初始化参数
  • 会话配置
  • 错误页面

学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 开发环境准备

开发环境要求:

  • JDK 17或更高版本
  • Tomcat 11.0.8或更高版本
  • Maven 3.6.0或更高版本
  • IDE(如IntelliJ IDEA、Eclipse)

2.2 项目结构规划

项目结构建议:

# Maven项目结构
fgedu-webapp/ # 项目根目录
├── src/ # 源代码目录
│ ├── main/ # 主要源代码
│ │ ├── java/ # Java源代码
│ │ ├── resources/ # 资源文件
│ │ └── webapp/ # Web资源
│ └── test/ # 测试代码
├── pom.xml # Maven配置文件
└── README.md # 项目说明

2.3 依赖管理

Maven依赖配置:

# pom.xml依赖配置
<dependencies>
  <dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>jakarta.servlet.jsp</groupId>
    <artifactId>jakarta.servlet.jsp-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

更多视频教程www.fgedu.net.cn

Part03-生产环境项目实施方案

3.1 创建Web应用

# 使用Maven创建Web应用
mvn archetype:generate -DgroupId=com.fgedu -DartifactId=fgedu-webapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
[INFO] Scanning for projects…
[INFO] ————————————————————————
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ————————————————————————
[INFO]
[INFO] — maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom —
[INFO] Generating project in Batch mode
[INFO] —————————————————————————-
[INFO] Using following parameters for creating project from Archetype: maven-archetype-webapp:1.4
[INFO] —————————————————————————-
[INFO] Parameter: groupId, Value: com.fgedu
[INFO] Parameter: artifactId, Value: fgedu-webapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.fgedu
[INFO] Parameter: packageInPathFormat, Value: com/fgedu
[INFO] Parameter: package, Value: com.fgedu
[INFO] Parameter: groupId, Value: com.fgedu
[INFO] Parameter: artifactId, Value: fgedu-webapp
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /root/fgedu-webapp
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 2.345 s
[INFO] Finished at: 2026-04-10T10:00:00Z
[INFO] ————————————————————————

3.2 开发Servlet

# 创建Java源代码目录
mkdir -p fgedu-webapp/src/main/java/com/fgedu/servlet

# 创建HelloServlet
vi fgedu-webapp/src/main/java/com/fgedu/servlet/HelloServlet.java
package com.fgedu.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(“/hello”)
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(““);
out.println(“

Hello, Tomcat!

“);
out.println(“

这是第一个Web应用

“);
out.println(“”);
}
}

3.3 配置web.xml

# 编辑web.xml
vi fgedu-webapp/src/main/webapp/WEB-INF/web.xml


xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd”
version=”6.0″>
fgedu-webapp

index.html
index.jsp

3.4 打包与部署

# 编译打包
cd fgedu-webapp && mvn clean package
[INFO] Scanning for projects…
[INFO] ————————————————————————
[INFO] Building fgedu-webapp Maven Webapp 1.0-SNAPSHOT
[INFO] ————————————————————————
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ fgedu-webapp —
[INFO] Deleting /root/fgedu-webapp/target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ fgedu-webapp —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ fgedu-webapp —
[INFO] Changes detected – recompiling the module!
[INFO] Compiling 1 source file to /root/fgedu-webapp/target/classes
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ fgedu-webapp —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ fgedu-webapp —
[INFO] Nothing to compile – all classes are up to date
[INFO]
[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ fgedu-webapp —
[INFO] No tests to run.
[INFO]
[INFO] — maven-war-plugin:2.2:war (default-war) @ fgedu-webapp —
[INFO] Packaging webapp
[INFO] Assembling webapp [fgedu-webapp] in [/root/fgedu-webapp/target/fgedu-webapp]
[INFO] Processing war project
[INFO] Copying webapp resources [/root/fgedu-webapp/src/main/webapp]
[INFO] Webapp assembled in [1.234s]
[INFO] Building war: /root/fgedu-webapp/target/fgedu-webapp.war
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 3.456 s
[INFO] Finished at: 2026-04-10T10:05:00Z
[INFO] ————————————————————————

# 部署到Tomcat
cp target/fgedu-webapp.war /Tomcat/app/webapps/

from Tomcat视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 实战案例:用户管理系统

# 创建用户管理Servlet
vi fgedu-webapp/src/main/java/com/fgedu/servlet/UserServlet.java
package com.fgedu.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(“/users”)
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(““);
out.println(“

用户管理系统

“);
out.println(“

“);
out.println(“

“);
out.println(“

“);
out.println(“

“);
out.println(“

“);
out.println(“

ID 姓名 邮箱
1 张三 zhangsan@fgedu.net.cn
2 李四 lisi@fgedu.net.cn
3 王五 wangwu@fgedu.net.cn

“);
out.println(“”);
}
}

# 重新打包部署
mvn clean package && cp target/fgedu-webapp.war /Tomcat/app/webapps/

4.2 目录结构解析

# 查看Web应用目录结构
ls -la /Tomcat/app/webapps/fgedu-webapp/
total 24
drwxr-xr-x 4 root root 4096 Apr 10 10:10 .
drwxr-xr-x 10 root root 4096 Apr 10 10:05 ..
drwxr-xr-x 3 root root 4096 Apr 10 10:10 META-INF
drwxr-xr-x 3 root root 4096 Apr 10 10:10 WEB-INF
-rw-r–r– 1 root root 150 Apr 10 10:00 index.html

# 查看WEB-INF目录
ls -la /Tomcat/app/webapps/fgedu-webapp/WEB-INF/
total 16
drwxr-xr-x 3 root root 4096 Apr 10 10:10 .
drwxr-xr-x 4 root root 4096 Apr 10 10:10 ..
drwxr-xr-x 3 root root 4096 Apr 10 10:10 classes
-rw-r–r– 1 root root 500 Apr 10 10:05 web.xml

# 查看classes目录
ls -la /Tomcat/app/webapps/fgedu-webapp/WEB-INF/classes/com/fgedu/servlet/
total 16
drwxr-xr-x 2 root root 4096 Apr 10 10:10 .
drwxr-xr-x 3 root root 4096 Apr 10 10:10 ..
-rw-r–r– 1 root root 1000 Apr 10 10:05 HelloServlet.class
-rw-r–r– 1 root root 1500 Apr 10 10:10 UserServlet.class

4.3 部署与验证

# 查看Tomcat日志
tail -f /Tomcat/app/logs/catalina.out
10-Apr-2026 10:15:00.000 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/Tomcat/app/webapps/fgedu-webapp.war]
10-Apr-2026 10:15:00.000 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/Tomcat/app/webapps/fgedu-webapp.war] has finished in [1500] milliseconds

# 访问应用首页
curl http://localhost:8080/fgedu-webapp/

Hello World!


# 访问HelloServlet
curl http://localhost:8080/fgedu-webapp/hello

Hello, Tomcat!


这是第一个Web应用


# 访问UserServlet
curl http://localhost:8080/fgedu-webapp/users

用户管理系统







ID 姓名 邮箱
1 张三 zhangsan@fgedu.net.cn
2 李四 lisi@fgedu.net.cn
3 王五 wangwu@fgedu.net.cn


4.4 常见问题与解决方案

  • 404错误:检查URL路径是否正确,确保Servlet映射配置正确
  • 500错误:查看Tomcat日志,检查代码是否有语法错误或运行时异常
  • 部署失败:检查WAR包是否正确构建,查看Tomcat日志
  • 类加载错误:检查依赖是否正确,确保所有必要的JAR包都已包含

学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

5.1 开发最佳实践

  • 使用Maven或Gradle管理项目依赖
  • 遵循Java编码规范
  • 使用注解配置Servlet(@WebServlet)
  • 合理组织代码结构
  • 编写单元测试

5.2 部署技巧

  • 使用热部署提高开发效率
  • 配置自动部署监控
  • 使用版本控制管理代码
  • 制定部署流程和规范
  • 备份部署文件

5.3 性能优化建议

性能优化建议:

  • 使用连接池管理数据库连接
  • 启用缓存减少重复计算
  • 优化Servlet代码,减少IO操作
  • 使用异步处理提高并发能力
  • 启用压缩减少网络传输

5.4 故障排查指南

  • 查看Tomcat日志文件
  • 检查应用日志
  • 使用浏览器开发者工具检查网络请求
  • 启用详细日志记录
  • 使用调试工具分析问题

风哥提示:在开发Web应用时,建议遵循MVC设计模式,将业务逻辑与表现层分离,提高代码的可维护性和可扩展性。

总结

本文详细介绍了如何开发第一个Web应用并部署到Tomcat,包括Web应用目录结构解析、开发步骤、部署过程和实战案例。通过本文的学习,您应该掌握了Web应用的基本开发流程和部署方法。

Web应用开发是Java企业级应用开发的基础,掌握Web应用的开发和部署技巧对于Java开发者来说非常重要。在实际开发中,建议遵循最佳实践,编写高质量的代码,确保应用的性能和稳定性。

更多学习教程公众号风哥教程itpux_com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息