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

时间:2011-12-16 13:04:38

标签: 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 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();
        }
    }
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

是的,某些字符在网址的某些部分无效。 (除了我希望你只是测试它并且实际上没有将它用于任何真实的,sql注入攻击和所有)这一事实时,你需要首先使用URLEncoder对sql查询进行编码。

答案 1 :(得分:4)

您永远不应在您的网址中传递您的SQL查询。