我正在使用Jersey和tomcat编写我的第一个Web服务。我想使用PUT方法使用javascript从网页上传文件。我注意到的是我的服务器没有得到PUT请求,而它似乎正在获得GET和POST。这是我在服务器端的方法:
@PUT
@Path("myPut")
@Produces(MediaType.TEXT_PLAIN)
public String myPut() {
System.out.print("OK!");
return "OK!";
}
这是我在客户端编写的代码:
function myFunction() {
var client = new XMLHttpRequest();
client.open("PUT", "http://localhost:8080/.../myPut", false);
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send("test");
}
如果我只是用GET或POST(在客户端和服务器上)替换方法,我就会得到“OK!”响应中的字符串(和打印)。我也试过卷曲,服务器似乎按照我的预期回答:
curl -X PUT -v http://localhost:8080/.../myPut
* Adding handle: conn: 0xc2eee0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0xc2eee0) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> PUT /.../myPut HTTP/1.1
> User-Agent: curl/7.32.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Content-Type: text/plain
< Content-Length: 3
< Date: Sat, 16 Nov 2013 17:45:36 GMT
<
* Connection #0 to host localhost left intact
OK!
我读了一下,似乎PUT应该同时适用于Firefox和Chrome,这意味着我做错了(here例如,PUT明确地在列表中;并且也来自第一个答案here我猜PUT应该可用)。有人能纠正吗?
如果这种方式完全错误/不可接受,你能否提出另一种技术(上传本地文件,可能允许我显示进度条)?
答案 0 :(得分:0)
问题是由同源策略引起的。从Web服务本身返回页面解决了这个问题。否则,CORS将是一种可能的解决方案。
答案 1 :(得分:-1)
默认情况下,Tomcat不支持PUT
方法。你需要配置它。看这里
http://www.codereye.com/2010/12/configure-tomcat-to-accept-http-put.html?m=1
您可以使用名为“Advanced Rest client”的Chrome扩展程序测试所有动词