Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp Jquery ajax版本工作,HttpUrlConnection POST不工作-响应代码500_Jsp_Servlets_Post - Fatal编程技术网

Jsp Jquery ajax版本工作,HttpUrlConnection POST不工作-响应代码500

Jsp Jquery ajax版本工作,HttpUrlConnection POST不工作-响应代码500,jsp,servlets,post,Jsp,Servlets,Post,我处理一个问题已经有一段时间了,如果有人能给我一些建议,我会非常感激 我基本上必须在另一台服务器上对aspx页面执行ajax调用。在IE8中,由于跨域问题,这不起作用。有人建议我尝试jquery的数据类型“jsonp”,这样做将允许IE8中的跨域通信,但失败了 所以,为了解决这个问题,我在我的代码中有一个浏览器检测例程来检查它是否是IE8。如果是IE8,我要做的就是对临时jsp页面进行ajax调用 临时jsp页面应该做的是获取这些参数并基本上将它们发布到aspx页面 关于这一点,我正在使用以下代

我处理一个问题已经有一段时间了,如果有人能给我一些建议,我会非常感激

我基本上必须在另一台服务器上对aspx页面执行ajax调用。在IE8中,由于跨域问题,这不起作用。有人建议我尝试jquery的数据类型“jsonp”,这样做将允许IE8中的跨域通信,但失败了

所以,为了解决这个问题,我在我的代码中有一个浏览器检测例程来检查它是否是IE8。如果是IE8,我要做的就是对临时jsp页面进行ajax调用

临时jsp页面应该做的是获取这些参数并基本上将它们发布到aspx页面

关于这一点,我正在使用以下代码:

<%

// get the parameters
String fileName = request.getParameter("fileName");
String param02 = request.getParameter("param02");
String param03 = request.getParameter("param03");
String param05 = request.getParameter("param05");
String param08 = request.getParameter("param08");
String param11 = request.getParameter("param11");


java.net.URL url;
java.net.HttpURLConnection connection = null;  
try {

    String urlParameters = "fileName="+ fileName+"&param02="+ param02+"&param03="+ param03+"&param05="+ param05+"&param08="+ param08+"&param11="+ param11;
    String encodedurl = java.net.URLEncoder.encode(urlParameters); 

    out.println(encodedurl);
    //Create connection
    url = new java.net.URL(
            "https://somepage.aspx");
    connection = (java.net.HttpURLConnection) url
            .openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    ////connection.setRequestProperty("Content-Type","text/xml; charset=utf-8");

    connection.setRequestProperty("Content-Length", "" + 
            Integer.toString(encodedurl.getBytes().length));
    connection.setRequestProperty("Content-Language", "en-US");  

    connection.setUseCaches (false);
    connection.setDoInput(true);
    connection.setDoOutput(true);

    //Send request
    DataOutputStream wr = new DataOutputStream (
            connection.getOutputStream ());
    wr.writeBytes (encodedurl);
    wr.flush ();
    wr.close ();
out.println(connection.getResponseCode());

    //Get Response

      InputStream is = connection.getInputStream();
      BufferedReader rd = new BufferedReader(new InputStreamReader(is));
      String line;
      StringBuffer responseBuffer = new StringBuffer(); 
      while((line = rd.readLine()) != null) {
        responseBuffer.append(line);
        responseBuffer.append('\r');
      }
      rd.close();
      out.println("\n\nRESPONSE\n\n" +responseBuffer.toString());
      out.println(connection.getErrorStream());



} catch (Exception e) {

    e.printStackTrace();
    out.println("Exception :(+ " +e);


} finally {

    if(connection != null) {
        connection.disconnect(); 
    }
}

    %>
在chrome中,会执行正常的ajax调用,并且可以正常工作-与此错误代码完全不同


谁能帮忙吗

服务器已崩溃。
连接.getErrorStream()
可能包含详细的错误报告。您需要在
catch
块中读取它

至于代码,至少URL对查询字符串的编码方式不正确

String urlParameters = "fileName="+ fileName+"&param02="+ param02+"&param03="+ param03+"&param05="+ param05+"&param08="+ param08+"&param11="+ param11;
String encodedurl = java.net.URLEncoder.encode(urlParameters); 
您不应该对分隔符
&
=
进行URL编码。按如下方式进行修复:

String charset = "UTF-8";
String urlParameters = String.format(
    "fileName=%s&param02=%s&param03=%s&param05=%s&param08=%s&param11=%s", 
        URLEncoder.encode(fileName, charset), 
        URLEncoder.encode(param02, charset), 
        URLEncoder.encode(param03, charset), 
        URLEncoder.encode(param05, charset), 
        URLEncoder.encode(param08, charset),
        URLEncoder.encode(param11, charset));
您还应该非常小心地使用字符集。您一直依赖于平台默认字符集,而不是显式指定它。服务器不一定使用相同的平台默认字符集。例如,内容长度可能因使用的字符集而异

您也不应该使用
DataOutputStream
来编写请求正文。它旨在创建所谓的
.dat
文件,其中数据块在二进制级别以特殊方式格式化和分离。只需直接将其写入
连接。getOutputStream()

服务器崩溃而不是返回一些HTTP
4nn
错误也表明服务器代码中存在编程错误。如果你能控制这一切,也要解决它。如果没有,请向负责的服务器管理员报告

另见:

当您得到HTTP响应代码500(内部服务器错误)时,我猜IE 8正在以aspx页面无法识别的方式传输您的请求。你能捕获IE和Chrome中发出的实际HTTP请求并进行比较吗?BalusC-这正是问题所在。我按照您指定的方式对参数进行了编码,并且工作正常。这不是你第一次帮助我。我真的很感谢你。
String charset = "UTF-8";
String urlParameters = String.format(
    "fileName=%s&param02=%s&param03=%s&param05=%s&param08=%s&param11=%s", 
        URLEncoder.encode(fileName, charset), 
        URLEncoder.encode(param02, charset), 
        URLEncoder.encode(param03, charset), 
        URLEncoder.encode(param05, charset), 
        URLEncoder.encode(param08, charset),
        URLEncoder.encode(param11, charset));
connection.getOutputStream().write(urlParameters.getBytes(charset));