2026.07.28 — ARCHIVE — 3 MIN

JavaWeb 全流程开发总结

从需求分析到部署上线,做一个完整的 JavaWeb 项目要经历哪些阶段,前后端各用什么技术。


JavaWeb 全流程开发总结

做完几个项目之后,对 JavaWeb 开发全流程有了更清晰的认识。

以前只觉得写个接口、写个页面就算开发完了,后来真正经历完整的项目周期,才发现中间有很多环节容易忽略。

现在把整个流程梳理一遍,从需求分析到部署上线,每个阶段干了什么。


六个阶段

1. 需求分析     → 确定做什么
2. 接口设计     → 前后端约定 API
3. 并行开发     → 前后端各写各的
4. 联调测试     → 前后端对接
5. 测试修复     → 找 bug 修 bug
6. 部署上线     → 打包部署到服务器

阶段一:需求分析

需求分析是第一步,也是最容易跳过的步骤。

直接开始写代码的话,写到最后发现功能漏了或者设计不合理,回头改很麻烦。

这一步要做的事情:

  • 确定项目有哪些功能模块
  • 设计数据库表结构
  • 列出每个功能对应的接口

比如做一个员工管理系统,功能模块大概有:

  • 登录/登出
  • 员工管理(增删改查、分页)
  • 部门管理(增删改查)
  • 文件上传

对应数据库表:

  • emp 表:员工信息
  • dept 表:部门信息
  • upload 表:文件记录

阶段二:接口设计

接口设计是前后端协作的基础,这一步做好了,后面联调会顺利很多。

核心是约定好每个接口的路径、请求方式、参数和返回值。

RESTful 风格是目前最常用的接口设计规范:

操作 HTTP 方法 URL 示例 说明
查询所有 GET /emps 返回员工列表
查询单个 GET /emps/1 返回 id=1 的员工
新增 POST /emps 请求体传员工数据
修改 PUT /emps 请求体传完整员工数据
删除 DELETE /emps/1 删除 id=1 的员工
分页查询 GET /emps?page=1&pageSize=10 带分页参数

统一响应格式也很重要,前后端约定好:

{
  "code": 1,
  "msg": "success",
  "data": { ... }
}

code=1 表示成功,其他值表示失败,msg 是错误信息。


阶段三:并行开发

接口设计好之后,前后端可以并行开发。

后端写 Controller、Service、Mapper,实现真实接口。

前端用 Mock 数据先完成页面结构和交互逻辑,不用等后端接口写完。

我一般是这样分工的:

后端先完成实体类、Mapper 接口和 XML 映射文件,然后是 Service 层,最后是 Controller 层。

前端先搭项目结构,配置路由和状态管理,然后逐个完成页面组件。


阶段四:前后端联调

联调是最考验耐心的环节。

主要问题是跨域和接口对不上。

跨域问题在前端开发环境可以用 Vite 代理解决:

export default defineConfig({
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    }
  }
})

生产环境用 Nginx 反向代理:

location /api/ {
    proxy_pass http://backend:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

接口对不上的问题,一般是参数名、参数格式或返回值结构不一致。用 Postman 逐一测试后端接口,确认没问题之后前端再对接。


阶段五:测试修复

测试阶段要重点检查:

  • 功能是否正常(每个按钮、每个表单)
  • 边界条件(空值、超长输入、重复提交)
  • 权限控制(未登录能否访问受保护页面)
  • 异常处理(接口报错时前端是否有友好提示)

这个阶段发现的问题最多,也最容易修。


阶段六:项目部署

部署是把项目放到服务器上,让其他人能访问到。

我们以 Docker Compose 部署为例。

后端打包:

cd backend && mvn clean package -DskipTests

前端打包:

cd frontend && npm run build

docker-compose.yml 定义所有服务:

services:
  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: Root@123456
      MYSQL_DATABASE: myapp
    volumes:
      - mysql-data:/var/lib/mysql

  redis:
    image: redis:7-alpine
    restart: always
    volumes:
      - redis-data:/data

  backend:
    build: ./backend
    restart: always
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: prod
    depends_on:
      - mysql
      - redis

  frontend:
    image: nginx:1.24-alpine
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./frontend/dist:/usr/share/nginx/html:ro
    depends_on:
      - backend

一条命令启动所有服务:

docker compose up -d

技术栈全景

浏览器
  ↓ HTTP/JSON
Nginx(静态资源 + 反向代理)
  ↓
Spring Boot 后端
  Controller → Service → Mapper → MySQL
  认证:JWT + Filter + Interceptor + ThreadLocal
  ↓
Vue3 前端
  路由(Vue Router)→ 状态(Pinia)→ 请求(Axios)→ UI(Element Plus)

开发流程记忆

需求 → 接口设计 → 前后端并行开发 → 联调 → 测试 → Docker 部署
浏览器 → Nginx → Spring Boot(Filter → Interceptor → Controller → Service → Mapper → MySQL)

小结

做完几个项目之后,最大的感受是:

流程比技术更重要。

技术点一个一个学,总有个学完的时候。但整个项目的开发流程,从需求分析到部署上线,每个阶段该做什么、注意什么,这些经验是项目做多了才有的。

写代码只是开发的一部分,把代码跑起来、部署上去、稳定运行,同样重要。

End of plate