如何让HttpServer识别Java中的特殊字符?

如何让HttpServer识别Java中的特殊字符?,java,httpserver,simplehttpserver,Java,Httpserver,Simplehttpserver,我想用Java HttpServer进行一些SQL查询,但HttpServer似乎无法识别我提交到浏览器中的链接中的特殊字符: [1]: http://localhost:8001/test?query=SELECT * WHERE{ ?s rdf:type ?o. } 我总是收到这样的答复: 400 Bad Request URISyntaxException thrown 这是我的服务器的代码: public class SimpleHttpServer { public stati

我想用Java HttpServer进行一些SQL查询,但HttpServer似乎无法识别我提交到浏览器中的链接中的特殊字符:

[1]: http://localhost:8001/test?query=SELECT * WHERE{ ?s rdf:type ?o. }
我总是收到这样的答复:

400 Bad Request
URISyntaxException thrown
这是我的服务器的代码:

public class SimpleHttpServer 
{

public static void main(String[] args) throws Exception 
{

        dir = args[0];
        HttpServer server = HttpServer.create(new InetSocketAddress(8001), 0);
        server.createContext("/test", new MyHandler());
        server.setExecutor(null);
        server.start();
    }

    static class MyHandler implements HttpHandler {
        public void handle(HttpExchange t) throws IOException {
            String response ;
            System.out.println(t.getRequestURI().getQuery().toString().replaceAll("query=",   ""));
            response =   ExecuteHttpQuery.getInstance().httpQuery(t.getRequestURI().getQuery().toString().replaceAll("query=", "").toString(), dir) + "\n";
            t.sendResponseHeaders(200, response.length());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }
}

如何解决此问题?

您不应该在URL中传递SQL查询。

是的,URL的某些部分中存在某些无效字符。(除此之外,我希望您只是在测试,而不是实际使用它进行任何真实的sql注入攻击等),您需要首先使用URLEncoder对sql查询进行编码。

您可能希望对链接进行urlencode,因为它包含空格和其他符号。看,我还没有弄清楚如何将URLConcoder和解码器与HTTPServer集成有任何示例吗?@NabilCHOUAIEB-您只需在客户端对查询进行url编码,然后在服务器上对查询进行url解码。哪个部分不工作?服务器部分没有运行,我希望客户端能够像这样发布URL*其中{s rdf:type?o.}只需在他的浏览器上,服务器必须能够识别所有具有请求的字符并发回响应我应该做什么?