在 Java Servlet 中,“通信”通常指 Servlet 与客户端(浏览器)通信,以及 Servlet 与 Servlet / 其他服务端组件通信。下面按常见场景说明。
客户端通过 HTTP 请求 与 Servlet 通信:
示例:获取请求参数
@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
Servlet 通过 HttpServletResponse 返回数据:
返回 JSON
resp.setContentType("application/json");
resp.getWriter().write("{\"msg\":\"success\"}");
前端:
fetch('/hello?name=Tom')
.then(res => res.text())
.then(console.log);
后端 Servlet 正常接收 HttpServletRequest。
服务器内部跳转,URL 不变
req.getRequestDispatcher("/other").forward(req, resp);
特点:
request 和 response客户端重新发起请求,URL 改变
resp.sendRedirect("/other");
特点:
request.setAttribute()session.setAttribute()ServletContext.setAttribute()URL url = new URL("http://other-server/api");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://other/api"))
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
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 通信),可以告诉我,我给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。