【问题标题】:Connection time out while accessing jsp using URLConnection使用 URLConnection 访问 jsp 时连接超时
【发布时间】:2016-04-19 15:34:25
【问题描述】:

我的代码来自服务器 jsp,它访问客户端机器中的另一个 jsp,这在我的办公室网络中可以完美地在客户端机器和服务器之间进行通信,没有任何问题。但是,当我的服务器 jsp 在办公室外(另一个网络)和我的网络中的客户端计算机时,相同的代码在服务器日志中出现连接超时异常。 当我通过 ajax 调用连接到客户端机器时,我能够得到客户端的响应。我的代码如下。

服务器jsp中的Java代码:

    URL jspUrl = new URL("...../Test.jsp");
    URLConnection servletConnection = jspUrl.openConnection();
    servletConnection.setDoOutput(true);
    servletConnection.setDoInput(true);
    servletConnection.setUseCaches(true);
    servletConnection.setDefaultUseCaches(true);
    servletConnection.setRequestProperty("Content-Type", "application/x-java-serialized-object");
    OutputStream outputStream = servletConnection.getOutputStream();
    ObjectOutputStream outputToServlet = new ObjectOutputStream(outputStream);
    outputToServlet.writeObject(object);
    outputToServlet.flush();

    InputStream inputStream = servletConnection.getInputStream();
    ObjectInputStream outputFromServlet = new ObjectInputStream(inputStream);
    readObject = outputFromServlet.readObject();
    outputFromServlet.close();
    outputToServlet.close();

服务器jsp中的Ajax代码正在运行:

function callAjax
{
     if(window.XMLHttpRequest)
     {
          reqObj=new XMLHttpRequest();
     }
     else 
     {
          reqObj=new ActiveXObject("Microsoft.XMLHTTP");
     }
     reqObj.onreadystatechange=processfunction;
     reqObj.open("POST","./jspName.jsp?"+Id,false);
     reqObj.send(null);
}

function processfunction()
{
    try
    {
        if(reqObj.readyState==4)
        {
            if(reqObj.status == 200)
            {
                var responseString = reqObj.responseText;

            }
        }
    }
    catch(e)
    {
        //alert(e);
    }

}   

【问题讨论】:

  • 这并不奇怪,您已经知道为什么会发生这种情况,正如您所说,两台机器都处于不同的断开网络中。
  • 但是可以连接ajax调用吗?如果情况如您所说,那么它也不应该与ajax一起使用..
  • 在你的帖子中你说你能够在服务器和客户端都在你的办公室而不是当服务器离开办公室时建立连接,你是否能够在服务器时进行 Ajax 调用在办公室外吗?
  • 是的,可以在服务器不在办公室时进行 ajax 调用。

标签: java ajax jsp servlets networking


【解决方案1】:

首先,确保您已连接到 Internet。然后将连接时间更改为零,即无限:

servletConnection.setConnectTimeout(0);

//Set read time out to zero if required
servletConnection.setReadTimeout(0);

【讨论】:

  • 您正在告诉如何处理连接超时,但我在问为什么我会收到此异常以及如何使用上述 java 代码从另一台网络客户端机器获取数据。
  • 尝试使用公共IP地址访问Web服务或服务器url。
猜你喜欢
  • 2016-08-13
  • 1970-01-01
  • 2011-09-25
  • 2021-02-18
  • 1970-01-01
  • 2018-06-09
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多