Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 对AJAX请求的Servlet响应为空_Java_Php_Javascript_Ajax_Servlets - Fatal编程技术网

Java 对AJAX请求的Servlet响应为空

Java 对AJAX请求的Servlet响应为空,java,php,javascript,ajax,servlets,Java,Php,Javascript,Ajax,Servlets,我正在使用javascript向servlet发送一个AJAX请求。servlet确实在应答,但是响应头和响应文本都是空的 当我尝试使用相同的客户端代码将请求发送到php页面时,效果很好 以下是两个客户端(您可以尝试它们并查看它们的来源): ajax到servlet:http://79.136.61.27/web/ajax-to-servlet.html ajax到php:http://79.136.61.27/web/ajax-to-php.html 向servlet发送请求时的输出为:

我正在使用javascript向servlet发送一个AJAX请求。servlet确实在应答,但是响应头和响应文本都是空的

当我尝试使用相同的客户端代码将请求发送到php页面时,效果很好

以下是两个客户端(您可以尝试它们并查看它们的来源):

  • ajax到servlet:http://79.136.61.27/web/ajax-to-servlet.html
  • ajax到php:http://79.136.61.27/web/ajax-to-php.html
向servlet发送请求时的输出为:

Response will go below

Response:

responseText was null!

Headers:

null response headers!
向PHP发送请求时的输出为:

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
下面是servlet的代码。正如您所见,我正在尝试设置标题和内容类型,但我的实验似乎没有任何效果。奇怪的是,我最近使用servlet做了一个hello world示例,它工作得很好,没有弄乱标题和其他东西。但现在它已经不起作用了(

包装简单;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
公共类SimpleServlet扩展了HttpServlet{
私有静态最终长SerialVersionId=-6713061702557291351L;
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
String out=“hifromservlet!

”; setContentType(“text/xml”); setHeader(“缓存控制”、“无缓存”); System.out.println(“获取请求”); PrintWriter pw=response.getWriter(); 写出来; pw.flush(); 布尔错误=pw.checkError(); System.out.println(“错误?”+错误); } }
hifromphp.php只是:

<?php
    echo "<p>Hi from php</p>";
?>

感谢阅读并提前感谢

编辑:我意识到这些链接不会永远起作用。因此,出于存档目的,我将ajax-to-servlet.html粘贴到这里。ajax-to-php.html除了请求所在的URL之外是相同的。 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>

发送ajax
/*  */

答复如下

如果调用servlet,它可以正常工作。但是,servlet运行的端口与ajax请求来自的端口不同。这违反了ajax请求的规则,因此浏览器不会处理ajax响应。除了在同一端口后托管servlet外,还需要返回或设置标头

如果要允许所有人使用servlet,请设置以下标题:

response.setHeader("Access-Control-Allow-Origin", "*");

链接的响应标题中的信息表明您正在运行Apache HTTPD和Apache Tomcat。很高兴知道您可以使用将Apache HTTPD连接到Apache Tomcat,这可能更有用。

您是否正在运行您认为正在运行的servlet类?感谢您的评论。是的,我可以看到它是如何调用的,以及我是如何使用它的t响应代码中的更改,因此我发布的确实正在执行。非常感谢您,BalusC,您的分析确实是正确的。我使用Tomcat连接器使其正常工作。非常感谢!
response.setHeader("Access-Control-Allow-Origin", "*");