2

我有一个非常奇怪的问题。我正在尝试使用 HTTP GET 和一些参数 (http://mydomain.com/method?param1=test¶m2=123) 调用 servlet (JSP)。如果我从浏览器或通过 bash 会话中的 WGET 调用它,它工作正常。但是,当我在 Java 客户端中使用 urlConnection 或 httpURLConnection 进行完全相同的调用时,服务器会返回 500 错误。

我已经尝试了我在网上找到的所有内容,包括:

urlConn.setRequestProperty("Accept-Language", "en-us,en;q=0.5");

但是,我尝试过的任何方法都没有奏效。不幸的是,我无法访问我正在调用的服务器,所以我看不到日志。

这是最新的代码:

private String testURLConnection() {
String ret = "";

String url = "http://localhost:8080/TestService/test";
String query = "param1=value1&param2=value2";

try {
    URLConnection connection = new URL(url + "?" + query).openConnection();
    connection.setRequestProperty("Accept-Charset", "UTF-8");
    connection.setRequestProperty("Accept-Language", "en-us,en;q=0.5");

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    String line;

    StringBuilder content = new StringBuilder();
    while ((line = bufferedReader.readLine()) != null) {
        content.append(line + "\n");
    }
    bufferedReader.close();
    metaRet = content.toString();
    log.debug(methodName + " return = " + metaRet);
} catch (Exception ex) {
    log.error("Exception: " + ex);
    log.error("stack trace: " + getStackTrace(ex));
}

return metaRet;

}

任何帮助将不胜感激!

4

2 回答 2

1

不幸的是,我无法访问我正在调用的服务器,所以我看不到日志。

不幸的是,服务器日志是查找导致 500 内部错误的原因的最佳位置。

响应正文中也可能有一些信息;例如,包含错误消息的 HTML 格式的错误页面和(如果幸运的话)格式化的堆栈跟踪。

否则,您可能不得不求助于转储请求标头以处理有效和无效的情况,并尝试找出它们的不同之处。然后,通过反复试验消除差异,直到找到导致问题的差异。


另一种看待这个问题的方式是,这是服务器的错,而不是客户端的错。服务器应该能够处理客户端向它抛出的任何请求。500 响应表示服务器不能。

但是当然,说“这是服务器的错”并不能帮助您解决问题。

于 2011-02-15T07:23:48.800 回答
0

我有同样的问题,但幸运的是我可以访问服务器日志。这是服务器的码头配置的问题。

服务器会给出这个异常:java.lang.IllegalStateException: Form too large1105723>200000

此修复程序位于服务器端的码头配置中。

从客户端,如果您的服务器允许,您可以尝试以 application/www-x-formencoded 以外的其他形式发送数据。

于 2013-10-18T07:20:39.857 回答