0

サーブレットを実行している Tomcat サーバーと通信する Android アプリを作成しています。サーバーがクライアント (Android アプリ) に送り返すファイルを指定して、Tomcat サーバーに POST を実行しています。POST で送信されたファイル名をカタログ名に追加してこのファイルを開こうとすると、FileNotFoundException が発生します。ただし、まったく同じファイル名をハードコーディングしても問題なく機能します。

FileNotFoundException が Tomcat サーバー コンソールから Windows エクスプローラーにスローされたときに取得されたファイル パスをコピーして貼り付けると、正しいファイルが開きます。また、ハードコードされたファイル パスと、ファイル名をカタログ パスに追加したパスの両方をログ ファイルに書き込みました。このログ ファイルでは、両方のテキストがまったく同じに見えます。両方をコピーして Windows エクスプローラーに貼り付けると、正しいファイルが開きます。これが FileNotFoundException を生成する理由を知っている人はいますか?

クライアント側から投稿を行う

String potentialIP = "http://"+url+":8080/se.myPage/myServlet";
URL url = new URL(potentialIP);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setChunkedStreamingMode(0);

// Starts the query
conn.connect();

OutputStream out = new BufferedOutputStream(conn.getOutputStream());
byte[] byteArray = korning.getBytes();
out.write(byteArray);
out.flush();

そして、サーバー側の doPost メソッドは次のようになります

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    InputStream in = request.getInputStream();
    java.util.Scanner s = new java.util.Scanner(in).useDelimiter("\\A");

    String fileName = s.hasNext() ? s.next() : "";
    String filePath = "C:/myCatalog/"+fileName;

    PrintWriter out = response.getWriter();

    PrintWriter writer = new PrintWriter("C:/myCatalog/Servletlog.txt", "UTF-8");
    writer.write("'"+"C:/myCatalog/hardCodedFileName.txt"+"'");
    writer.write("'"+filePath+"'");
    writer.flush();
    writer.close();

    BufferedReader reader = new BufferedReader(new FileReader(filePath));

    String svar = reader.readLine();
    reader.close();     
    out.close();
}

誰でもこれを解決する方法についてアイデアを持っていますか?

4

1 に答える 1

0

私にとっては、サーバーがデフォルトのユーザーエージェントが何であれブロックしていて(おそらく何もなかった)、 を返していることがわかりました403。そして、これはFileNotFoundException私の試みにスローされます。次に、別のサーバーからサンプル json に変更しました: http://date.jsontest.com/ これにより、次のような json が返されます。

{
   "time": "05:58:38 AM",
   "milliseconds_since_epoch": 1400047118645,
   "date": "05-14-2014"
}

別のサーバーに切り替えると、すべてがうまく機能しました-後で、(上で述べたように) ユーザーエージェントに問題があることがわかりました-Chromeユーザーエージェントのようなものに設定すると、正常に動作するはずです.

それがあなたを助けることを願っています。

于 2014-05-14T06:00:04.610 に答える