从请求URL获取哈希参数

我有这样的url – http://www.coolsite.com/daily-plan/#id=1解析该字符串并读取哈希值(#id =之后的值)的最简单方法是什么? 谢谢

在客户端(即从JavaScript),您可以检查window.location.hash以获取哈希值。 在服务器端,一般答案是’不可能’,因为哈希不是在请求中发送到服务器。

更新:我可能误解了这个问题。 我的答案是关于如何在请求处理期间在浏览器或服务器端代码中获取URL的哈希部分,而不是字符串处理。

Upd2:回答此处的评论,因为它不适合评论。

当用户点击您的导航链接时,它是如何工作的?

我假设哈希被更改,相应的内容通过来自Web服务或REST的AJAX请求下载。

例如,如果您的用户在其浏览器中有URL http://www.example.com,则此页面会显示产品类别列表。 用户点击一个类别,URL更改为www.example.com/#id=5,该类别(ID = 5)的产品将通过AJAX下载并显示在页面上。 没有回发,只有部分页面刷新。

这接近你的情景吗?

现在,您希望用户直接在浏览器地址栏中粘贴/输入www.example.com/#id=5,然后直接转到该类别中的产品列表。

/#id = 5不会被浏览器请求发送到服务器 ,因此无法在服务器端获取该值,并且您无法对其执行任何操作,因为浏览器决定不发送此数据而您在服务器端没有它。

在我们的项目中,我们使用解决方案,当服务器只返回公共页面代码/ html,即页眉,页脚,没有页面的主/中心部分。 然后有一个JavaScript代码,它在加载这个常见的HTML之后立即执行。 它需要window.location.hash并通过AJAX将其发送到Web服务,Web服务返回页面主要部分的内容(HTML)。

 new URI("http://.../abc#xyz").getFragment(); 

请参阅Javadocs以获取URI

 String url = " http://www.coolsite.com/daily-plan/#id=1"; int sharpPos = url.indexOf('#'); String q = null; if (sharpPos >= 0) { q = url.substring(sharpPos); } 

当然,您可以使用各种字符串操作方法,包括正则表达式。

但实际上你的例子很奇怪。 通常,URL的参数在问号后传递。 在这种情况下,您可以使用标准类URL:

String q = new URL(" http://www.coolsite.com/daily-plan?id=1").getQuery();

你用这个做什么的?

如果您使用的是jsp或servlet,则对您有用

 if (request.getParameter("#id") == null) { out.println("Please enter your name."); } else { out.println("Hello "+request.getParameter(i)+"!"); } 

如果您正在使用javascript,那么以下function将对您有用

 function getURLParameters() { var sURL = window.document.URL.toString(); if (sURL.indexOf("?") > 0) { var arrParams = sURL.split("?"); var arrURLParams = arrParams[1].split("&"); var arrParamNames = new Array(arrURLParams.length); var arrParamValues = new Array(arrURLParams.length); var i = 0; for (i=0;i 

以下是捕获锚链接的方法。 适用于所有Web框架。

我将使用一个示例场景来说明:假设我们需要捕获未经身​​份validation的用户请求的深层URL http://server.com /#/ xyz ,以便可以在登录后将其重定向到该深层URL。

  1. 未经身份validation的用户请求http://server.com /#/ xyz (从’#’开始的所有内容都不会发送到服务器)。

  2. 所有服务器都知道用户想要http://server.com/并且他们未经身份validation。 服务器将用户重定向到登录表单。

  3. 这里有一个聪明的一点:客户端仍然在等待他们的原始请求,所以如果服务器在登录表单中包含一个隐藏元素,其中一些JS引用了window.location.href,它可以捕获原始请求的完整URL 锚部分:

     

  4. 用户对自己进行身份validation,并使用POST发送原始URL。 然后,服务器可以将用户转发到原始的深URL。

用’?’替换’#’ 在解析url时。 检查下面的代码

 String url = "http://www.coolsite.com/daily-plan/#id=1"; String urlNew = url.replace("#", "?"); String id = Uri.parse(urlNew).getQueryParameter("id"); 

如果您的URL与您编写的相同,并且不包含任何其他内容,那么Java上的whis代码将对您有所帮助

  String val = "http://www.coolsite.com/daily-plan/#id=1"; System.out.println(val.split("#id")[1]); 

不要忘记检查为空值。

PS如果使用servlet,可以从request.getAttribute(“id”)获取此参数。

最诚挚的问候,心理