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可用。

其他可用的参数是:

     调试记录的消息的调试详细级别     
                         通过这个 servlet。[0]                          

     fileEncoding 用于读取静态资源的编码   
                         [平台默认]                             

     input 读取时的输入缓冲区大小(以字节为单位)      
                         要服务的资源。[2048]                

     Listings 是否应该产生目录列表,如果有
                         此目录中没有欢迎文件吗?[错误的]
                         警告:目录列表有很多    
                         条目可能很慢并且可能会消耗            
                         很大比例的服务器资源。   

     output 写入时的输出缓冲区大小(以字节为单位)     
                         要服务的资源。[2048]                

     readonly 这个上下文是“只读”的,所以 HTTP           
                         PUT 和 DELETE 等命令是               
                         被拒绝?[真的]                              

     readmeFile 与目录一起显示的文件    
                         内容。[无效的]                               

     sendfileSize 如果使用的连接器支持 sendfile,则此  
                         表示以 KB 为单位的最小文件大小     
                         将使用哪个发送文件。使用负数    
                         值始终禁用 sendfile。[48]        

     useAcceptRanges 是否应包含 Accept-Ranges 标头    
                         在适当的地方回应?[真的]         

于 2014-09-27T01:30:55.837 回答
0

Tomcat 提供了一个 servlet 初始化参数(只读),您可以设置它以启用 PUT、DELETE。

我遇到了一个不同但相关的问题,我注意到了这个参数。

在此处查看文档以获取信息:http: //tomcat.apache.org/tomcat-7.0-doc/default-servlet.html

于 2012-07-06T16:26:25.967 回答