在weblogic下运行的servlet无法找到HTTP PUT请求的原始文件名

时间:2012-12-12 09:52:58

标签: http servlets weblogic filenames put

我已经设置了一个简单的servlet,用作文件服务器。我使用Weblogic 10.3.2作为容器。

我想处理PUT请求,所以我实现了doPut方法。由于它是一个PUT请求,我希望在标题中找到我推送到服务器的文件的名称。

我推送一个名为test.txt的文件,其中包含“Hello World”。

curl -T test.txt http://xxxxxxx:71xxx

使用curl和netcat,这是请求。

PUT /test.txt HTTP/1.1
User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.21.2 OpenSSL/0.9.8h zlib/1.2.3
Host: xxxxxxxxx:71xx
Accept: */*
Content-Length: 12
Expect: 100-continue

Hello World

使用servlet和weblogic 10.3.2,这里是HTTPServletRequest。 这是我在发送curl命令后在doPut方法中打印HTTPServletRequest java对象时得到的结果。

weblogic.servlet.internal.ServletRequestImpl@17d11f0[
PUT /WebServer/FileServlet HTTP/1.1
User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.21.2 OpenSSL/0.9.8h zlib/1.2.3
Accept: */*
Content-Length: 12
Expect: 100-continue

]

如果我处理HTTPServletRequest的输入流,我会得到我文件的内容,但会丢失文件名。

有没有办法在HTTPServletRequest中获取原始文件名? 你能解释一下发生了什么吗?

编辑:实际上我不明白为什么requestURL和requestURI会改变并反映servlet映射而不是原始信息?

1 个答案:

答案 0 :(得分:2)

文件名不作为文件的一部分传递。 (因此,如果您从具有名为“bodyOnly”的文件输入的网页上传为POST,您将从“bodyOnly”参数中获取文件名)

所以你必须找到另一种传递文件名的方法 - 也许适当的方法是让你的服务器按照

的方式处理网址。
http://xxxxxxx:71xxx/[filename]

所以你用

上传文件
curl -T test.txt http://xxxxxxx:71xxx/test.txt