2011-12-16 14 views
0

私は私のJava HttpServerをして​​、いくつかのSQLクエリを作成したいが、HttpServerを、私は私のブラウザに送信するリンクに特殊文字を認識していないようです:HttpServerでJavaの特殊文字が認識されるようにするにはどうすればよいですか?

[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

スペースやその他の記号が含まれている可能性がありますので、あなたのリンクをurlencodeする必要があります。 http://en.wikipedia.org/wiki/Percent-encoding – clamp

答えて

4

URLにSQLクエリを渡すべきではありません。

+0

+1を参照してください。これを過度に強調することはできません。 – Perception

+0

理由を知るためにhttp://en.wikipedia.org/wiki/SQL_injectionを読むことができます。 – Vadzim

5

はい、URLの特定の部分では有効でない特定の文字があります。 (実際にはこれをテストして実際に何か実際のSQLインジェクション攻撃やすべてを使用しないことを望むという事実以外に、URLEncoderを使用してSQLクエリを最初にエンコードする必要があります。

+0

URLEncoderとDecoderをHTTPServerと統合するにはどうすればいいですか? この例はありますか? –

+0

@NabilCHOUAIEB - あなたは単にクライアントでクエリをエンコードし、サーバーでクエリをurldecodeします。どの部分が機能していないのですか? – jtahlborn

+0

サーバー部分が実行されていない、私はクライアントがhttp:// localhost:8001/test?query = SELECT * WHERE {?s rdf:type?oのようなURLを投稿できるようにしたい。 }単純に彼のブラウザでは、サーバーはすべての文字を認識できる必要があります。 –

関連する問題