在GWT中,我们需要在URL中使用#从一个页面导航到另一个页面,即为eg创建历史记录。www.abc.com/#questions/10245857,但由于这个原因,我在分享网址时遇到了一个问题。谷歌的剪贴者只在# (即www.abc.com )之前读取网址。
现在,我想从我的url中删除#,并将其保持为www.abc.com/question/10245857。
我不能这样做。我该怎么做?
当用户导航应用程序时,我使用散列urls和History对象(至于不重新加载页面)。然而,有时很好/需要有一个漂亮的URL (例如,用于共享、公开显示等等)。所以我想知道如何提供相同页面的漂亮URL。
注:
我们必须这样做,使我们的网页网址可爬行,并链接到外部世界的网站。
发布于 2014-08-29 00:57:14
这里有三个问题,每个问题都可以解决:
这些似乎都是同一个问题,但在这方面它们是截然不同的。
显示漂亮的URL
可以使用一个使用HTML5状态方法的小javascript文件来完成。您可以看到一个简单的演示这里,使用来源在这里。这使得对"#“的所有更改都没有"#”(在现代浏览器上)。
小提琴的相关代码:
var stateObj = {locationHash: hash};
history.replaceState(stateObj, "Page Title", baseURL + hash.substring(1));回复到漂亮的URL
这是相对简单的,只要GWT中有一个侦听器可以基于页面加载的"#“加载。您只需抛出一个简单的重定向servlet,当请求传入时,它将重新插入"#“标记。
对于servlet,侦听漂亮的URL:
if(request.getPathInfo()!=null && request.getPathInfo().length()>1){
response.sendRedirect("#" + request.getPathInfo());
return;
}或者,您可以从这个servlet直接提供GWT应用程序,并使用URL中的参数初始化它,但是需要注意一些相对路径簿记。
WebCrawlers
这是最难对付的。基本上,这里不能有静态(Ish)页面。如果你索引的是有限的简单状态,那就不难了。一个简单的方案是有一个单独的servlet,它以最小格式的HTML返回通常用GWT获取的原始内容。这个servlet可以有一个不同的URL模式,比如"/indexing/“。这些不是人类的,只是网络爬虫用的。您可以在页面加载后将一个简单的javascript附加到将用户重定向到漂亮的url中。
下面是这样一个servlet的doGet方法的示例:
response.setContentType("text/html;charset=UTF-8");
response.setStatus(200);
pw = response.getWriter();
pw.println("<html>");
pw.println("<head><script>");
pw.println("window.location.href='http://www.example.com/#"
+ request.getPathInfo() + "';");
pw.println("</script></head>");
pw.println("<body>");
pw.println(getRawPageContent(request.getPathInfo()));
pw.println("</body>");
pw.println("</html>");
pw.flush();
pw.close();
return;然后,您应该有一些链接到这些索引页面隐藏在您的主应用程序URL (或后面的链接在您的主应用程序URL)。
https://stackoverflow.com/questions/25522085
复制相似问题