news 2026/4/18 10:09:21

api vs jsp 绑定风格

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
api vs jsp 绑定风格

api vs jsp 绑定风格

这是一个关于Java Web Servlet接口的示例,我将为您创建两个Servlet

  1. 一个支持cURL或任何标准 HTTP 客户端调用的接口 (CurlCallableServlet)。
  2. 一个通常不直接设计为 cURL 调用,而是与JSP页面集成(用于渲染视图)的接口 (JspBoundServlet)。

请注意:从技术上讲,任何暴露 HTTP 端点的Servlet都可以被 cURL 调用。这里的“不支持”主要是指它的设计意图和通常用法:它通常会将请求转发给一个 JSP 页面来生成完整的 HTML 响应,而不是像 API 接口那样直接返回数据。

1. 支持 cURL 调用的 Servlet (API 风格)

这个 Servlet 通常用于提供API 服务,它直接返回数据(例如 JSON 或纯文本),可以轻松地被 cURL 或其他编程客户端调用。

文件:CurlCallableServlet.java

import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 使用 @WebServlet 注解,映射到 /api/data 路径 @WebServlet("/api/data") public class CurlCallableServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. 设置响应的内容类型为 JSON,方便客户端(如 cURL)解析 response.setContentType("application/json"); // 2. 设置字符编码 response.setCharacterEncoding("UTF-8"); // 3. 构造要返回的数据 String name = request.getParameter("name"); String message = (name != null && !name.isEmpty()) ? "Hello, " + name + "! Data fetched successfully." : "Data fetched successfully for an anonymous user."; // 4. 简单 JSON 格式输出 String jsonResponse = String.format( "{\"status\":\"success\", \"message\":\"%s\", \"timestamp\":%d}", message, System.currentTimeMillis()); // 5. 写入响应 PrintWriter out = response.getWriter(); out.print(jsonResponse); out.flush(); } }

cURL 调用示例 (假设您的应用运行在http://localhost:8080):

# 简单的 GET 请求 curl http://localhost:8080/yourapp/api/data # 带有参数的 GET 请求 curl "http://localhost:8080/yourapp/api/data?name=UserA" # 预期输出类似: # {"status":"success", "message":"Hello, UserA! Data fetched successfully.", "timestamp":1701234567890}

2. 不支持 cURL 调用的 Servlet (JSP 绑定风格)

这个 Servlet 通常用于MVC (Model-View-Controller)模式的Controller部分。它的主要工作是处理请求、准备数据,然后使用RequestDispatcher将控制权转发给一个 JSP视图来渲染完整的 HTML 页面。如果用 cURL 调用,它会返回一个完整的 HTML 页面,而不是简洁的数据,所以通常认为它“不支持”直接作为 API 调用。

文件:JspBoundServlet.java

import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 映射到 /app/page 路径 @WebServlet("/app/page") public class JspBoundServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1. **不设置 ContentType** (通常由 JSP 来处理最终的 HTML 响应) // 2. 准备数据 (Model) String user = "Guest"; String time = new java.util.Date().toString(); // 3. 将数据放入 request 作用域,供 JSP 访问 request.setAttribute("username", user); request.setAttribute("serverTime", time); // 4. **转发**请求到 JSP 视图 (View) // 核心区别:它不自己写响应,而是把响应生成任务交给 JSP。 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/welcome.jsp"); dispatcher.forward(request, response); // 注意:在这个 Servlet 方法中,response.getWriter().print(...) 不会被调用 // 所有输出都由 JSP 负责。 } }

JSP 文件:/WEB-INF/views/welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Welcome Page</title> </head> <body> <h1>Hello, ${username}!</h1> <p>This is a view rendered by JSP.</p> <p>Current Server Time: <strong>${serverTime}</strong></p> <button onclick="alert('This is a button for a real user.')">Click Me</button> </body> </html>

cURL 调用示例 (假设您的应用运行在http://localhost:8080):

curl http://localhost:8080/yourapp/app/page # 预期输出:返回的是整个 HTML 页面内容,包含 <head>, <body> 等标签, # 客户端(cURL)通常只想要数据的场景下,这种输出是不合适的。 # <!DOCTYPE html><html><head>...</head><body>...</body></html>

总结比较

特性CurlCallableServlet (API 风格)JspBoundServlet (JSP 绑定风格)
设计意图提供结构化数据(JSON/XML)作为 API作为控制器,处理请求后转发给视图(JSP)
响应内容application/jsontext/plaintext/html(由 JSP 生成)
主要方法response.getWriter().print(...)直接输出数据request.getRequestDispatcher().forward(...)转发到 JSP
cURL 适用性非常适用(返回简洁数据)不适用(返回完整的 HTML 页面)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:58:57

终极指南:快速掌握Scarab空洞骑士模组管理神器

终极指南&#xff1a;快速掌握Scarab空洞骑士模组管理神器 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 想要轻松管理几十个空洞骑士模组却不知从何下手&#xff1f;Scarab作…

作者头像 李华
网站建设 2026/4/18 8:30:10

百度网盘高速下载工具使用手册:告别蜗牛速度的秘诀

还在为百度网盘那令人抓狂的下载速度而烦恼吗&#xff1f;想象一下&#xff0c;原本需要几个小时下载的文件&#xff0c;现在只需几分钟就能完成&#xff01;今天我要分享的这款神器&#xff0c;正是为解决这一痛点而生——百度网盘高速下载工具&#xff0c;让你的下载体验瞬间…

作者头像 李华