1

我有一个 servlet,它以 XML 格式响应。

客户端通过 httpsURLConnection 连接到这个 servlet。现在如果客户不打电话有问题connection.disconnect()吗?

让我们按照这种情况:

url = "https://abc.com/ws/servlet?task=login"

openconnection()...

现在客户端必须发布用户名和密码,如果成功,他可以发布新的参数,如task=getSomeData,...etc. 在断开之前。

对于每个连接,客户端都会成为新的 httpsession。

如果客户端不调用connection.dissconnect(),会话超时后连接会自动关闭吗?如果没有,那么什么时候?它还能活多久?如果有太多“未断开”连接,服务器会出现问题吗?

更新:示例客户端

        HttpsURLConnection conn = null;
        InputStream inputstream = null;
        try{

            URL url = new URL("https://abc.com/ws/servlet");
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

            conn = (HttpsURLConnection)url.openConnection();
            conn.setSSLSocketFactory(sslsocketfactory);
            inputstream = conn.getInputStream();

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(inputstream);

            ......;

        }catch(Exception ex){
            ex.printStackTrace();
        }
        finally{
            try {
                if( inputstream != null )
                    inputstream.close();
                if( conn != null )
                    //conn.disconnect();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

客户端不设置超时,在这种情况下,如果这个客户端不调用disconnect(),服务器会使用哪个超时?Servlet 容器连接器超时?但是改变它会影响这个容器中的所有应用程序。

默认的 Tomcat 连接器超时为 20000 = 2 分钟,这是否意味着,我最多只能在 2 分钟内使用我打开的连接?2分钟后会自动断开吗?

非常感谢。

4

1 回答 1

1

disconnect() 方法用于向底层 HTTP 连接池发出信号,表明您在不久的将来不太可能连接到此 URL,因此无需再将连接池化。除非在这种情况下,您不需要调用它。但是,您确实需要关闭连接的输出和输入流,以便将其释放回池中。池将自行关闭空闲或死连接。

于 2013-12-14T11:23:46.480 回答