在客户端连接终止时停止服务器线程

时间:2018-12-06 09:13:09

标签: tomcat web connection client-server

我在机器上运行以下代码,sample.jsp在我的tomcat服务器上运行。 sample.jsp的代码在无限循环中运行。

public static void main(String[] args) throws Exception {

    URL obj = new URL("http://localhost:8080/bank/sample.jsp");
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("GET");

    if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { // success

        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try(BufferedInputStream stream = new BufferedInputStream(con.getInputStream()) ) {

            byte[] buffer = new byte[1024];


            int bytesRead = 0;
            while ( (bytesRead = stream.read(buffer)) > 0 && byteArrayOutputStream.size() <= 1024 * 100) {
                byteArrayOutputStream.write(buffer, 0, bytesRead);
            }
        }

        if(byteArrayOutputStream.size() > 1024 * 100){
            stream.close();
            con.disconnect();
            throw new Exception("content too big.  hence terminating...");
        }
    }
}

以下是我的jsp中的代码:

<%@page import = "java.io.File" %>
<%@page import = "java.io.FileWriter" %>
<%
for(long i=0;i < 10;)
{
out.println("HelloHelloHelloHelloHelloHello");
}
%>

当输出流超过特定大小时,我关闭连接以及打开的流。这不会停止在我的tomcat服务器上启动的进程。但是,当从客户端关闭连接时,我想停止服务器端程序。我也没有得到IOException并且线程似乎无限期地运行。任何人都可以帮助我如何停止线程。

1 个答案:

答案 0 :(得分:1)

服务器上的线程将继续运行,直到完成为止,除非它尝试将输出写入客户端并且客户端已终止连接。在这种情况下,将抛出IOException,并且请求处理线程可能会停止您的应用程序正在执行的操作并返回到容器中。

如果有无限循环,则服务器上的代码将无限期运行。

没有什么好的方法可以终止应用程序服务器中的线程阻塞;这不是特定于Tomcat的。