温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java servlet如何通信

发布时间:2026-10-31 20:50:42 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java Servlet 中,“通信”通常指 Servlet 与客户端(浏览器)通信,以及 Servlet 与 Servlet / 其他服务端组件通信。下面按常见场景说明。


一、Servlet 与客户端(浏览器)通信(最常用)

1️⃣ 请求(Request)通信

客户端通过 HTTP 请求 与 Servlet 通信:

  • URL 参数(GET)
  • 表单提交(POST)
  • JSON / AJAX

示例:获取请求参数

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        String name = req.getParameter("name");
        resp.getWriter().write("Hello " + name);
    }
}

浏览器访问:

http://localhost:8080/hello?name=Tom

2️⃣ 响应(Response)通信

Servlet 通过 HttpServletResponse 返回数据:

  • 文本(HTML / JSON)
  • 重定向
  • 文件下载

返回 JSON

resp.setContentType("application/json");
resp.getWriter().write("{\"msg\":\"success\"}");

3️⃣ 前端 AJAX 与 Servlet 通信(前后端分离)

前端:

fetch('/hello?name=Tom')
  .then(res => res.text())
  .then(console.log);

后端 Servlet 正常接收 HttpServletRequest。


二、Servlet 与 Servlet 通信(服务器端)

1️⃣ 请求转发(Forward)

服务器内部跳转,URL 不变

req.getRequestDispatcher("/other").forward(req, resp);

特点:

  • 共享 request 和 response
  • 客户端无感知

2️⃣ 重定向(Redirect)

客户端重新发起请求,URL 改变

resp.sendRedirect("/other");

特点:

  • 不共享 request
  • 可用于跨应用

3️⃣ 共享数据通信

  • request.setAttribute()
  • session.setAttribute()
  • ServletContext.setAttribute()

三、Servlet 与其他服务通信(HTTP 调用)

1️⃣ 使用 HttpURLConnection

URL url = new URL("http://other-server/api");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");

BufferedReader br = new BufferedReader(
    new InputStreamReader(conn.getInputStream()));

2️⃣ 使用 HttpClient(Java 11+,推荐)

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("http://other/api"))
    .build();

HttpResponse<String> response =
    client.send(request, HttpResponse.BodyHandlers.ofString());

四、WebSocket 通信(实时通信)

Servlet 3.1+ 支持:

@ServerEndpoint("/ws")
public class WsServer {
    @OnMessage
    public void onMessage(Session s, String msg) {
        s.getBasicRemote().sendText("echo: " + msg);
    }
}

五、总结对照表

通信方式 是否跨网络 是否客户端感知 典型用途
Request / Response ❌ ✅ 前后端交互
Forward ❌ ❌ Servlet 内部协作
Redirect ✅ ✅ 页面跳转
HTTP Client ✅ ✅ 微服务调用
WebSocket ✅ ✅ 实时通信

如果你是指 具体某一种通信方式(比如:Servlet 怎么和前端 Vue 通信 / Servlet 怎么调另一个 Servlet / Servlet 怎么和 Spring 通信),可以告诉我,我给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手