java - 无法使用 jquery Ajax 从 Java HttpServer 获得响应

标签 java ajax

我有一个运行的 Java Http 服务器,它以 Hello World 响应。代码如下。

public class ScannerHttpService {

    public static void startService() throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/jsp", new JspHandler());
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class JspHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
            String response = "Hello World";
            //specify it before sendResponseHeaders()
            t.getResponseHeaders().add("Content-Type", "text/plain; charset=" + StandardCharsets.UTF_8.name());
            t.sendResponseHeaders(200, response.length());
            System.out.println(t.getResponseHeaders().entrySet());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes(StandardCharsets.UTF_8));
            os.close();
        }
    }
}

我想使用 ajax 调用此服务并在 jsp 页面的警告窗口中显示响应。我正在使用以下代码。

<%@page import="java.io.*" %>
<%@page import="java.net.*" %>
<%@page import="java.nio.charset.StandardCharsets" %>

<html>
<head>
    <title>Service Verification</title>
    <%--<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>--%>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script>
        function getText(){
            var response = '';
            $.ajax({ type: "GET",
                url: "http://example.com:8000/jsp",

                success : function(text)
                {
                    response = text;
                },
                error : function()
                {
                    response = "Fail"
                }
            });

            alert(response);
        }
    </script>
</head>
<body>
    <form accept-charset="utf-8">
        <h3>Click Ready!</h3>
        <input type="submit" value="Ready" onclick="getText()"/>
    </form>
</body>
</html>

我无法从服务器获得响应。它在浏览器中抛出以下错误。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://example.com:8000/jsp. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 1 (unknown)

我哪里做错了?我可以访问这两个代码。服务器和客户端都在同一个网络中。

编辑: 按照@Brian bcr666 Ray 和@Sandeep 的建议,我添加了

t.getResponseHeaders().add("Access-Control-Allow-Origin", "*");

到java代码。它现在正在工作。

最佳答案

看起来 Ajax 调用源自一个 UI,该 UI 托管在服务器以外的某个其他域上。您可以在服务器上为 /jsp 端点启用 CORS,它应该可以工作。

按照这个:https://enable-cors.org/server.html

关于java - 无法使用 jquery Ajax 从 Java HttpServer 获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43064851/

相关文章:

java - jni4net 不兼容的类更改错误

java - 无法在全局配置 Mule SDK 中加载外部库 jar

javascript - 使用 HTML5、Ajax 和 jQuery 发送表单

javascript - 如何正确加载一个又一个ajax请求

javascript - 每x秒从服务器请求数据的最佳方式

java - ResourceHandler 与 Controller 中的通配符冲突

java - Spring Boot Lombok 可嵌入主键日期

java - 范围问题

javascript - 是否可以在上传前同时验证文件大小和扩展名?

java - 附件的 HTTP 响应 header 内容处置