从我的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();
}
答案 0 :(得分: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>
默认情况下,在tomcat中加载参数debug
和listings
,而默认值readonly
为true,这意味着只有GET和POST可用。
其他可用的参数:
debug Debugging detail level for messages logged by this servlet. [0] fileEncoding Encoding to be used to read static resources [platform default] input Input buffer size (in bytes) when reading resources to be served. [2048] listings Should directory listings be produced if there is no welcome file in this directory? [false] WARNING: Listings for directories with many entries can be slow and may consume significant proportions of server resources. output Output buffer size (in bytes) when writing resources to be served. [2048] readonly Is this context "read only", so HTTP commands like PUT and DELETE are rejected? [true] readmeFile File to display together with the directory contents. [null] sendfileSize If the connector used supports sendfile, this represents the minimal file size in KB for which sendfile will be used. Use a negative value to always disable sendfile. [48] useAcceptRanges Should the Accept-Ranges header be included in responses where appropriate? [true]
答案 1 :(得分:0)
Tomcat提供了一个servlet init参数(readonly),而不是你可以设置为启用PUT,DELETE。
我遇到了一个不同但相关的问题,我注意到了这个参数。
请查看此处的文档以获取相关信息:http://tomcat.apache.org/tomcat-7.0-doc/default-servlet.html