3

Android アプリケーションから、Tomcat の webapps ディレクトリに保存されているイメージを削除しようとしています。次のコードを試すと、403 ステータス コードが表示されます。オンラインで調べたところ、リクエストが合法であるがアクションが禁止されている場合にそのコードが表示されることがわかりました。私のコードは次のとおりです。

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
int responseCode = connection.getResponseCode();

HttpClientを使用しようとすると、同じエラーが発生しました - HTTP/1.1 403 Forbidden

HttpClient httpClient = new DefaultHttpClient();
                  try {
                    httpClient.getParams().setParameter(
                            "http.socket.timeout", new Integer(90000));
                    HttpDelete delete = new HttpDelete(new URI(
                            "http://192.168.2.1:9090/LocationUpdaterServlet/images/"
                                    + userid));
                    Toast.makeText(Image.this, "Removing your picture", 5000).show();
                    HttpResponse response = httpClient.execute(delete);
                    if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                        System.out.println(response.getStatusLine());
                    } else {
                        // Here every thing is fine.
                    }
                    HttpEntity resEntity = response.getEntity();
                    if (resEntity == null)
                        System.out
                                .println("---------Error No Response !!!-----");
                }catch (Exception ex) {
                    System.out.println("---------Error----"+ ex.getMessage());
                    ex.printStackTrace();
                } finally {
                    httpClient.getConnectionManager().shutdown();

                }
4

2 に答える 2

3

web.xml で、次のように他の http メソッドを有効にします。

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>readonly</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

パラメータdebuglistingsはデフォルトで tomcat にロードされますが、デフォルトreadonlyは true であり、GET と POST のみが使用可能であることを意味します。

利用可能な他のパラメーターは次のとおりです。

     ログに記録されたメッセージのデバッグ詳細レベル     
                         このサーブレットによって。[0]                          

     fileEncoding 静的リソースの読み取りに使用されるエンコーディング   
                         [プラットフォームのデフォルト]                             

     読み込み時の入力バッファサイズ(バイト単位)      
                         提供されるリソース。[2048]                

     リストが存在する場合、ディレクトリ リストを生成する必要があります。
                         このディレクトリにウェルカムファイルがありませんか? [間違い]
                         警告: 多くのディレクトリのリスト    
                         エントリは遅くなる可能性があり、消費する可能性があります            
                         サーバー リソースのかなりの割合。   

     output 書き込み時の出力バッファサイズ(バイト単位)     
                         提供されるリソース。[2048]                

     readonly このコンテキストは「読み取り専用」なので、HTTP           
                         PUT や DELETE などのコマンドは、               
                         拒否されましたか?[真実]                              

     readmeFile ディレクトリとともに表示するファイル    
                         コンテンツ。[ヌル]                               

     sendfileSize 使用するコネクタが sendfile をサポートしている場合、これは  
                         の最小ファイル サイズを KB で表します。     
                         どの sendfile が使用されるか。マイナスを使う    
                         sendfile を常に無効にする値。[48]        

     useAcceptRanges Accept-Ranges ヘッダーを含めるかどうか    
                         必要に応じて応答しますか?[真実]         

于 2014-09-27T01:30:55.837 に答える
0

Tomcat は、PUT、DELETE を有効にするために設定できるサーブレットの初期化パラメーター (読み取り専用) を提供します。

関連する別の問題があり、このパラメーターに気付きました。

情報については、こちらのドキュメントを確認してください: http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html

于 2012-07-06T16:26:25.967 に答える