在 Debian 上使用 JSP 进行 API 接口设计
一 架构与职责划分
- 采用Servlet + JSP的轻量组合:用Servlet/JAX-RS 资源类承担控制器与业务逻辑,统一处理路由、参数解析、鉴权、校验、异常映射;用JSP仅负责HTML/JSON 视图渲染(API 场景建议以 JSON 为主,必要时再用 JSP 生成文档或调试页面)。避免在 JSP 中写 JDBC/业务逻辑,遵循MVC分离,提升可维护性与可测试性。JSP 本质是 Servlet,首次访问会被容器转译为 _jsp.java 再编译执行,适合展示层而非接口层。
二 环境与项目骨架
- 运行环境
- 安装 OpenJDK 11 与 Tomcat 9(Debian 常见做法):sudo apt update && sudo apt install openjdk-11-jdk tomcat9;部署时将 WAR 放入 /var/lib/tomcat9/webapps/,或解压到 webapps/ROOT/ 下直接根路径访问。
- 工程结构
- 标准 Maven Web 结构:src/main/java(Servlet/资源类)、src/main/webapp(JSP、静态资源)、src/main/webapp/WEB-INF/web.xml。打包为 WAR 部署至 Tomcat。
- 依赖示例(Maven,Servlet API 设为 provided,避免与容器冲突)
- javax.servlet:javax.servlet-api:3.1.0(provided)
- javax.servlet.jsp:jsp-api:2.2(provided)
- 如需 REST:org.glassfish.jersey.core:jersey-server、jersey-container-servlet-core 等(打包进 WAR 的 WEB-INF/lib)。
三 接口设计规范与实现要点
- 路由与版本
- 统一前缀与版本:如 /api/v1/;版本可放 URL 或 Accept 头(如 application/vnd.example.v1+json)。
- 数据格式与字符集
- 请求/响应统一用 JSON,UTF-8;设置 Content-Type: application/json;charset=UTF-8。
- 状态码与错误
- 正确使用 HTTP 状态码(200/201/204/400/401/403/404/500 等),并定义统一错误码+错误信息结构,便于客户端处理。
- 安全
- 全站 HTTPS;接口使用 Token/JWT 或 OAuth 2.0;对敏感数据加密存储与传输;严格输入校验并使用参数化查询防 SQL 注入。
- 文档与测试
- 使用 Swagger/OpenAPI 自动生成文档与调试界面;配合 Postman/Insomnia 做集成测试;上线前做单元/集成/性能测试(如 JMeter)。
- 数据库访问
- 采用 DAO/Repository 模式与 JDBC PreparedStatement 防止注入;连接使用连接池(Tomcat JDBC 或 HikariCP);事务在 Service 层控制。
四 两种常见实现路径
五 部署与运维要点
- 部署与日志
- WAR 放入 /var/lib/tomcat9/webapps/ 自动部署;查看 /var/log/tomcat9/catalina.out 定位启动与运行问题;必要时配置 manager 应用进行远程管理(注意安全)。
- 依赖与构建
- 使用 Maven 管理依赖与打包(mvn clean package);将依赖打进 WAR 的 WEB-INF/lib,避免容器类加载冲突;设置 JAVA_HOME 保证编译与运行一致。
- 监控与优化
- 接入 监控/告警(如 Prometheus + Grafana),关注 响应时延、错误率、线程池、连接池;按需做 缓存、异步、连接池调优。