Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确重定向不以HTTP或HTTPS协议开头的URL?_Java_Url_Redirect - Fatal编程技术网

Java 如何正确重定向不以HTTP或HTTPS协议开头的URL?

Java 如何正确重定向不以HTTP或HTTPS协议开头的URL?,java,url,redirect,Java,Url,Redirect,我正在覆盖HttpServletResponseWrapper.sendRedirect()方法。通常,重定向url将以http或https开头。但我们确实遇到了如下URL: //www.google.com 当您将此URL分配给js中的window.location时,此URL有效。但是,如果我们尝试重定向此URL,它将失败。因为它总是把它看作一个相对的路径。 您知道如何正确重定向这样的URL吗?您可以依赖以下内容 这将告诉您是否是http/https来处理相对URL(即不指定架构或主机的U

我正在覆盖
HttpServletResponseWrapper.sendRedirect()
方法。通常,重定向url将以
http
https
开头。但我们确实遇到了如下URL:

//www.google.com

当您将此URL分配给js中的
window.location
时,此URL有效。但是,如果我们尝试重定向此URL,它将失败。因为它总是把它看作一个相对的路径。
您知道如何正确重定向这样的URL吗?

您可以依赖以下内容


这将告诉您是否是http/https来处理相对URL(即不指定架构或主机的URL),您需要从触发处理的
ServletRequest
复制缺少的部分。Java类
URL
有一个帮助器方法:

URL requestURL = new URL( request.getRequestURL() );
URL redirectURL = new URL( requestURL, "//www.google.com" );
参考,默认情况下,没有协议的链路将使用当前协议


因此,您可以简单地使用当前页面的协议。

根据我的经验,您需要地址的“协议”部分。如果你错过了,浏览器会更宽容(因此为什么在新窗口中打开可以正常工作)。您可以查看firefox(或类似产品)的源代码,了解它们如何解决缺少协议的问题。或者在重定向链接中测试协议,如果缺少,则在新窗口中打开。您可以参考以下内容:您好,Dev,如何使用此ServletRequest.getScheme()检查//www.google.com?