Jsp Jquery ajax版本工作,HttpUrlConnection POST不工作-响应代码500
我处理一个问题已经有一段时间了,如果有人能给我一些建议,我会非常感激 我基本上必须在另一台服务器上对aspx页面执行ajax调用。在IE8中,由于跨域问题,这不起作用。有人建议我尝试jquery的数据类型“jsonp”,这样做将允许IE8中的跨域通信,但失败了 所以,为了解决这个问题,我在我的代码中有一个浏览器检测例程来检查它是否是IE8。如果是IE8,我要做的就是对临时jsp页面进行ajax调用 临时jsp页面应该做的是获取这些参数并基本上将它们发布到aspx页面 关于这一点,我正在使用以下代码:Jsp Jquery ajax版本工作,HttpUrlConnection POST不工作-响应代码500,jsp,servlets,post,Jsp,Servlets,Post,我处理一个问题已经有一段时间了,如果有人能给我一些建议,我会非常感激 我基本上必须在另一台服务器上对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+"¶m02="+ param02+"¶m03="+ param03+"¶m05="+ param05+"¶m08="+ param08+"¶m11="+ 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+"¶m02="+ param02+"¶m03="+ param03+"¶m05="+ param05+"¶m08="+ param08+"¶m11="+ param11;
String encodedurl = java.net.URLEncoder.encode(urlParameters);
您不应该对分隔符&
和=
进行URL编码。按如下方式进行修复:
String charset = "UTF-8";
String urlParameters = String.format(
"fileName=%s¶m02=%s¶m03=%s¶m05=%s¶m08=%s¶m11=%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()
服务器崩溃而不是返回一些HTTP4nn
错误也表明服务器代码中存在编程错误。如果你能控制这一切,也要解决它。如果没有,请向负责的服务器管理员报告
另见:
String charset = "UTF-8";
String urlParameters = String.format(
"fileName=%s¶m02=%s¶m03=%s¶m05=%s¶m08=%s¶m11=%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));