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

标签 http servlets weblogic filenames put

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

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

我推送了一个名为 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 命令后在打印HTTPServletRequest java 对象的doPut 方法中停止时得到的结果。

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 会改变并反射(reflect) servlet 映射而不是原始信息?

最佳答案

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

因此,您必须找到另一种传递文件名的方法 - 也许合适的方法是让您的服务器按照

处理 url
http://xxxxxxx:71xxx/[filename]

所以你用

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

关于http - 无法找到在 weblogic 下运行 servlet 的 HTTP PUT 请求的原始文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13837055/

相关文章:

Python http.client.RemoteDisconnected

node.js - Angular HTTP 无法获得完整响应

java - Servlet上下文和Spring应用上下文的本质区别

java - Servlet 映射 : Only when a file or directory doesn't exist?

java - 从 Weblogic 服务器到 IIS SSL 服务的 x509 客户端身份验证(无法加载服务器信任的 CA java.lang.NullPointerException)

web - 将 Web 应用程序从 Tomcat 移动到 WebLogic 时库版本错误

php - 您可以使用 PHP 的内置 Curl 函数设置要下载的最大文件大小吗?

http - Golang 多次读取请求正文

java - 如何在一个 Spring 应用程序的 web.xml 中注册多个 servlet

java - Weblogic 10.3.6 域向导无法创建 JVM