Ich sende eine AJAX-Anfrage mit Javascript an ein Servlet. Das Servlet antwortet tatsächlich, aber der Response-Header ist null und der Antworttext auch.
Wenn ich versuche, denselben Client-Code stattdessen die Anforderung an eine PHP-Seite zu senden, funktioniert es gut.
Hier sind die beiden Clients (Sie können sie ausprobieren und sich die Quellen ansehen):
- ajax-to-servlet:
http://79.136.61.27/web/ajax-to-servlet.html - ajax-to-php:
http://79.136.61.27/web/ajax-to-php.html
Die Ausgabe beim Senden der Anfrage an das Servlet ist:
Response will go below
Response:
responseText was null!
Headers:
null response headers!
Die Ausgabe 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, experimentiere ich ein wenig mit den Einstellungen für Header und Inhaltstyp, aber keines meiner Experimente scheint irgendeine Wirkung zu haben. Das Seltsame ist, dass ich vor kurzem ein Hallo-Welt-Beispiel wie dieses mit Servlets gemacht habe, und es funktionierte ganz gut, ohne dass ich mit Headern und so etwas herumgespielt habe. Aber jetzt funktioniert es einfach nicht mehr :(
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>";
?>
Danke fürs Lesen und vielen Dank im Voraus!
Edit: Ich habe festgestellt, dass diese Links nicht ewig funktionieren werden. Daher füge ich zu Archivierungszwecken ajax-to-servlet.html hier ein. ajax-to-php.html ist bis auf die URL, an die die Anfrage geht, identisch. 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>