0

我正在使用这样的 HTML 表单,

<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Submit">
</form>

这个 HTML 表单的路径例如http://www.mywebapp.com/sample.html

在我的 servlet 中,当我使用String url = req.getRequestURL().toString();并打印出字符串时,它会打印表单操作 URL http://www.mywebapp.com/myservlet?userid=12345而不是 HTML URL。

预期的 HTML URL:http ://www.mywebapp.com/sample.html (只有我从这里请求并且我需要这个 URL)

谁能建议我如何在 servlet 中获取 HTML url 路径。

4

3 回答 3

3

如果我理解正确,您希望在发出后续请求(form帖子)时获取一个请求(加载 html 的请求)的 URL。

HTTP 是无状态的,因此无法可靠地做到这一点。

需要这样做有一点代码味道,但如果你真的需要 URL,你将不得不将 URL 作为隐藏inputform. 有多种方法可以做到这一点,无论您是使用 JSP/JSTL 还是使用 JavaScript 在客户端做一些事情,但基本上您试图获得form这样的结果:

<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
   <input type="file" name="file">
   <input type="hidden" name="url" value="http://www.mywebapp.com/sample.html"/>
   <input type="submit" value="Submit">
</form>
于 2013-01-22T09:49:04.647 回答
3

这是某种问题,因为用户在编写时加载了页面http://www.mywebapp.com/sample.html,并且在此初始请求中,您将request.getRequestURL().toString完全从该值中获得

在使用表单(来自客户端)的下一个请求中,url 不再是这个http://www.mywebapp.com/sample.html,而是在属性中指定的form action那个。

有很多建议以表单或类似的方式传递隐藏值,但您可以轻松使用简单的 HTTP。每次执行 GET 请求时,您都会在浏览器(或其他客户端)窗口中获得一个新 URL,但是当您在浏览器中执行 POST 请求时,URL 不会改变。因此,现在在您的代码中,如果您知道这是一个 POST 请求并且您想从该请求发出的位置获取页面,您可以轻松地从 Http Header "Referer" 中读取它:

String URLfromWherePostWasMade = request.getHeader("Referer"); 

这应该与所有“隐藏字段”示例相同

于 2013-01-22T10:01:29.267 回答
1

您的“HTML 页面”称为“Referrer”,您可以通过这种方式获取它

HttpServletRequest.getHeader("Referer");

在您的情况下,它将返回提交表单的页面

http://www.mywebapp.com/sample.html
于 2013-01-22T10:15:22.447 回答