Java 如何在servlet中获取html请求URL

Java 如何在servlet中获取html请求URL,java,servlets,Java,Servlets,我使用这样的HTML表单 <form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="Submit"> </form> 这个HTML表单的路径是,比如说 在我的servlet中,当我使用字符串url=req.getRequ

我使用这样的HTML表单

<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Submit">
</form>
这个HTML表单的路径是,比如说

在我的servlet中,当我使用字符串url=req.getRequestURL.toString时;并打印出字符串,它打印表单操作URL,而不是HTML URL

期望的HTML URL:从这里只有我请求,我需要这个URL


有人可以建议我如何在servlet中获取HTML url路径吗

如果我理解正确,您希望获取一个请求的URL,即当您向表单post发出后续请求时加载html的请求

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

需要这样做会有一点代码的味道,但是如果你真的需要URL,你必须将URL作为隐藏输入传递到表单中。有多种方法可以做到这一点,无论您是使用JSP/JSTL还是使用JavaScript在客户端执行某些操作,但基本上您都试图获得如下表单:

<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>

这是一个问题,因为用户在编写时加载了页面http://www.mywebapp.com/sample.html 在这个初始请求中,您将从request.getRequestURL.toString获得这个值

在下一个请求中,使用来自客户端url的表单不再是这样http://www.mywebapp.com/sample.html 但形式行动中规定的一个

有很多建议以这样的形式传递隐藏值,但是您可以轻松地使用简单的HTTP。每次当您收到请求时,您都会在浏览器或其他客户端窗口中获得一个新的URL,但当您在浏览器中发布请求时,URL不会更改。因此,现在在您的代码中,如果您知道这是一个POST请求,并且希望从该请求提交的页面中获取该页面,那么您可以轻松地从Http头引用器中读取该页面,如下所示:

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

这与所有隐藏字段示例的工作原理相同

您的“HTML页面”称为引用者,您可以通过这种方式获得它

HttpServletRequest.getHeader("Referer");
在您的情况下,它将返回提交表单的页面

http://www.mywebapp.com/sample.html

您是否尝试使用getRequestURI.toString?你所说的HTML URL是什么意思?您是否希望获取/myservlet?userid=12345?请将示例字符串粘贴到此处,即html url路径..以便有人帮助您。@KevinEsche如果我使用getRequestURI.toString;我只得到了/myservlet我希望得到http://www.mywebapp.com/sample.html@sp00m不,我希望http://www.mywebapp.com/sample.htmlYes 你理解对了。我在这里面临的问题是,客户端可以使用任何设备,并且从该HTML页面请求将被发送到我的servlet。所以,我不可能要求客户机将URL作为隐藏地址发送。你还有其他想法吗?很可能,如果你不控制客户端html,那么它是从另一个Web应用甚至服务器加载的?如果是在同一个webapp中,您可能可以通过会话执行某些操作,但听起来情况并非如此。底线是,如果URL对servlet很重要,那么它是servlet所需的参数之一,任何客户机都必须遵守该参数,就像其他参数一样。当我使用多部分/表单数据时,servlet中的隐藏字段值为null,您能告诉我如何解决它的问题吗,我从您的原始问题中复制了-您可以删除多部分/表单数据位。然后我开始硬编码这个值,一旦成功,我就使用JSTLURL标记设置这个值。现在我想将输出发送到作为隐藏传递的URL。我尝试使用请求调度器,但失败了。我可以给出+1-Doh的想法,希望我在回答现在已删除的答案之前考虑HTTP头,因为它具有误导性。嘿,但我的建议仅适用于管理HTTP引用值的客户端环境。当然,这些环境都是我所知道的网络浏览器。尽管要注意这一点-是的,就像我说的-它只在普通的标准用户环境中工作,主要是web浏览器,但当我在https中尝试它时,我得到了空值。我在这个问题上的搜索尝试了它,但如果它的https den返回空值,请参阅此链接。如果它返回空值,则表示HTTP引用未被填充。HTTP Referer由浏览器填充,HTTPS连接没有HTTP Referer:如果引用页面使用安全协议传输,则客户端不应在非安全HTTP请求中包含Referer头字段,因此如果使用HTTPS连接,则无法执行此操作。资料来源: