首页 > 解决方案 > 当在 servlet 中关闭输出流时,是否意味着套接字连接也正在关闭?

问题描述

最近,我决定开始创建自己的 servlets 容器,以更好地了解 apache tomcat 和服务器应用程序通常是如何工作的。所以,为此,我需要学习套接字编程。所以,据我所知,当套接字的输出流被关闭时,套接字连接也被关闭。我不明白如何让 apache tomcat 在 http 请求/响应交互后不关闭套接字连接优化我的应用程序。

这是代码片段:

Socket socket;
PrintWriter pw = new PrintWriter(socket.getOutputStream());
pw.close();

关闭返回的 OutputStream 将关闭关联的套接字。

所以,如果另一个套接字试图从输入流中获取一些东西,那么它将得到一个套接字已关闭的异常。我刚刚给出了没有应用程序协议的裸套接字(HTTP,WS ...)

但是,当有一个 servlet 并且它的输出流被这样的程序员关闭时会发生什么:

// The http request has the header - Keep-alive : true   

public class DisplayHeader extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse 
   response)
   throws ServletException, IOException {

   PrintWriter out = response.getWriter();
   out.close();

}

就我而言,关闭任何高流将调用 close() 方法,其他流保持较低,直到关闭基本流。因此,关闭打印器后,套接字的输出流也已关闭。所以,可能决定只是刷新缓冲区内容,仅此而已,在需要之前不要使用 close 方法?

标签: javasocketstomcatservletsjakarta-ee

解决方案


推荐阅读