Servlet-Antwort an AJAX-request ist leer
Ich sende eine AJAX-request mittels javascript an ein servlet. Das servlet ist in der Tat Antworten, aber die Antwort-header ist null und so ist der Antwort-text.
Wenn ich versuche, den gleichen client-code, anstatt senden Sie die Anfrage an eine php-Seite funktioniert es einwandfrei.
Hier sind die zwei Kunden (Sie können versuchen Sie Sie und schauen Sie bei Ihren Quellen):
- ajax-servlet: http://79.136.61.27/web/ajax-to-servlet.html
- ajax-php: http://79.136.61.27/web/ajax-to-php.html
Den Ausgang beim senden der Anfrage an den servlet ist:
Response will go below
Response:
responseText was null!
Headers:
null response headers!
Den Ausgang beim senden der Anfrage an PHP ist:
Response will go below
Response:
Hi from php
Headers:
Date: Sun, 17 Apr 2011 11:58:57 GMT Server: Apache/2.2.17 (Win32) PHP/5.3.6 X-Powered-By: PHP/5.3.6 Content-Length: 18 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html
Hier ist der code für das servlet. Wie Sie sehen können bin ich Experimentieren ein wenig mit den Einstellungen Header und Inhalt geben, aber keiner meiner versuche scheinen, um eine Wirkung. Die seltsame Sache ist, dass ich noch eine Hallo-Welt-Beispiel, wie dies mithilfe von servlets erst vor kurzem und es funktioniert nur ohne messing mit Header und so. Aber jetzt ist es einfach nicht mehr funktioniert. 🙁
package simple;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = -6713061702557291351L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String out = "<p>Hi from servlet!</p>";
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
System.out.println("got request");
PrintWriter pw = response.getWriter();
pw.write(out);
pw.flush();
boolean error = pw.checkError();
System.out.println("Error? " + error);
}
}
hifromphp.php ist einfach:
<?php
echo "<p>Hi from php</p>";
?>
Vielen Dank für das Lesen und vielen Dank im Voraus!
Edit: ich erkannte, dass diese links funktionieren nicht immer. So, für Archiv-Zwecke, ich bin einfügen ajax-to-servlet.html hier. ajax-to-php.html ist identisch, mit der Ausnahme der URL, wohin der Antrag geht.
ajax-to-html.html:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Send ajax</title>
</head>
<body>
<script type="text/javascript">
/* <![CDATA[ */
function getXMLHttp() {
var xmlHttp = new XMLHttpRequest();
return xmlHttp;
}
function sendAjax() {
var xmlHttp = getXMLHttp();
var divResp = document.getElementById("response");
var divHdrs = document.getElementById("responseHeaders");
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
var hdrs = xmlHttp.getAllResponseHeaders();
var resp = xmlHttp.responseText;
divHdrs.innerHTML = "<p>Headers:</p><p>" + (hdrs ? hdrs : "null response headers!<p>");
divResp.innerHTML = "<p>Response:</p>" + (resp ? resp : "<p>responseText was null!<p>");
}
}
xmlHttp.open("GET", "http://79.136.61.27:8080/SimpleServlet/SimpleServlet", true);
xmlHttp.send(null);
}
/* ]]> */
</script>
<p><input type="button" value="Send Ajax" onclick="javascript: sendAjax();"/></p>
<p>Response will go below</p>
<div id="response"></div>
<div id="responseHeaders"></div>
</body>
</html>
Vielen Dank für Ihren Kommentar. Ja, ich kann sehen, wie es aufgerufen wird und wie es reagiert auf änderungen im code, also die, die ich gepostet ist in der Tat ausführen.
InformationsquelleAutor Eric Lilja | 2011-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rufen Sie das servlet standalone es funktioniert gut. Aber das servlet läuft auf einem anderen port als dem der ajax-Anfrage kommt. Dies verstößt gegen die Same-Origin-Policy für ajax-requests und somit der browser nicht verarbeiten, die ajax-Antwort. Abgesehen von hosting-servlet hinter den gleichen port, die Sie brauchen, um wieder JSONP oder legen Sie die HTTP
Access Control
Header.Wenn Sie zulassen möchten, dass jeder Verwendung der servlet, legen Sie die folgenden header:
Die Informationen in die Antwort-Header von deinem links deutet darauf hin, dass man Apache HTTPD und Apache Tomcat. Es ist gut zu wissen, dass Sie eine Verbindung herstellen können Apache HTTPD, Apache Tomcat mit Tomcat Connector, kann es nützlicher sein.
Es ist mir eine Freude, zu tun also, nochmals vielen Dank!
Du bist herzlich willkommen.
InformationsquelleAutor BalusC