Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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 Javascript与http请求的通信_Java_Javascript_Minecraft_Bukkit_Mit Scratch - Fatal编程技术网

Java Javascript与http请求的通信

Java Javascript与http请求的通信,java,javascript,minecraft,bukkit,mit-scratch,Java,Javascript,Minecraft,Bukkit,Mit Scratch,最近,我一直在尝试在minecraft服务器(使用Java运行)和scratch(使用JavaScript运行)之间进行通信。 我已经用java编写了代码: package me.yotam180; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; import o

最近,我一直在尝试在minecraft服务器(使用Java运行)和scratch(使用JavaScript运行)之间进行通信。 我已经用java编写了代码:

package me.yotam180;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.HashMap;
import java.util.Map;

import org.bukkit.Bukkit;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;


public class HttpProcessor {
     public MainClass plugin;
    public HttpProcessor (MainClass plug) throws IOException {
        plugin = plug;
        plugin.getLogger().info("CREATED HTTTP PROCESSOR");
        HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
        server.createContext("/pollplayer", new PollPlayerHandler());
        server.createContext("/killplayer", new KillPlayerHandler());
        plugin.getLogger().info("STARTED HTTTP SERVER");
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class PollPlayerHandler implements HttpHandler {

        @SuppressWarnings("deprecation")
        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            // TODO Auto-generated method stub
            Map <String,String>parms = HttpProcessor.queryToMap(httpExchange.getRequestURI().getQuery());
            StringBuilder response = new StringBuilder();
            response.append(Bukkit.getPlayer(parms.get("name")).getLocation().toString());
            HttpProcessor.writeResponse(httpExchange, response.toString());
        }
    }
    static class KillPlayerHandler implements HttpHandler {

        @SuppressWarnings("deprecation")
        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            // TODO Auto-generated method stub
            Map <String,String>parms = HttpProcessor.queryToMap(httpExchange.getRequestURI().getQuery());
            Bukkit.getPlayer(parms.get("name")).setHealth(0);
            HttpProcessor.writeResponse(httpExchange, "SUCCESS");
        }
    }

    public static void writeResponse(HttpExchange httpExchange, String response) throws IOException {
        httpExchange.sendResponseHeaders(200, response.length());
        OutputStream os = httpExchange.getResponseBody();
        os.write(response.getBytes());
        os.close();
      }

    public static Map<String, String> queryToMap(String query){
        Map<String, String> result = new HashMap<String, String>();
        for (String param : query.split("&")) {
            String pair[] = param.split("=");
            if (pair.length>1) {
                result.put(pair[0], pair[1]);
            }else{
                result.put(pair[0], "");
            }
        }
        return result;
      }

}
我无法对JS代码进行不同的格式化,因为Scratch只能使用这种格式。在
ext.get_Player
函数中,我必须转到Java http服务器,请求
/pollplayer?name=+name
,然后回调它


我很乐意得到一个解决方案:)谢谢

解决方案非常简单。我只需要添加一个标题“允许跨源访问”,问题就解决了

httpExchange.getResponseHeaders().set("Access-Control-Allow-Origin", "*");
httpExchange.getResponseHeaders().set("Content-Type", "text/plain");

解决办法非常简单。我只需要添加一个标题“允许跨源访问”,问题就解决了

httpExchange.getResponseHeaders().set("Access-Control-Allow-Origin", "*");
httpExchange.getResponseHeaders().set("Content-Type", "text/plain");

sun.net
已被弃用。使用适当的HTTP连接,例如依赖关系Apache HTTP库;为什么呢?您是否尝试过“Reporter blocks that wait”代码示例(与您想要的非常相似),它是否有效?您是否检查过web浏览器的javascript控制台是否存在可能的错误?您是否尝试过验证将正确的URL发送到Minecraft服务器?首先,非常感谢您的回答。等待的ReporterBlock正是我想要的,但我无法让它工作。我尝试了天气的例子,它奏效了。之后,我将$.ajax部分中的url更改为我的java服务器,它停止工作。我想我可能提供了错误的HTTP响应。这是我第一次使用真正的javascript,所以我不知道有一个控制台。。。如何打开它?不,我没有使用数据包分析器,但我会试试。Tommorow在我的时区中,我将尝试使用不同的HTTP响应方式,但谢谢。如果代码示例在更改为您自己的URL时中断,则表明错误在Java部分。数据包分析器显示“天气”URL返回建议的
访问控制允许来源
响应头。Java代码也应该这样做,否则web浏览器可能会因为您的URL是(不安全的)跨源请求而拒绝您的URL。在Google Chrome中,您可以在“更多工具”下的菜单中找到JavaScript控制台(快捷方式:Ctrl+Shift+J);在响应处理中,但现在即使在浏览器中也不显示eresponse:(
sun.net
已弃用。请使用正确的HTTP连接,例如依赖项Apache HTTP库。我相信您知道自己在做什么,但中的样板代码看起来与您的不同;原因是什么?您是否尝试过“Reporter blocks that wait”代码示例(与您想要的非常相似),它工作了吗?您是否检查了web浏览器的javascript控制台是否存在可能的错误?您是否尝试了验证是否将正确的URL发送到Minecraft服务器?首先,非常感谢您的回答。等待的ReporterBlock正是我想要的,但我无法使其工作。我尝试了天气示例,它工作了。之后,我用c将$.ajax部分中的url挂到我的java服务器上,它停止了工作。我想我可能提供了错误的HTTP响应。这是我第一次使用真正的javascript,所以我不知道有一个控制台…如何在Chrome上打开它?不,我没有使用数据包分析器,但我会尝试。明天在我的时区我会尝试making不同的HTTP响应方式,但谢谢。如果代码示例在更改为您自己的URL时中断,则表明错误在Java部分。数据包分析器显示“weather”URL按照建议返回一个
访问控制允许来源
响应头。您的Java代码也应该这样做,否则web浏览器可能会出错拒绝您的URL,因为它是一个(不安全的)跨源请求。在Google Chrome中,您将在“更多工具”(快捷方式:Ctrl+Shift+J)下的菜单中找到JavaScript控制台。我在响应处理中添加了行httpExchange.getRequestHeaders().set(“Access Control Allow origin”,“*”);但现在它甚至在浏览器中也不显示eresponse:(