【问题标题】:Web page without real files corresponding to URLs?没有与 URL 对应的真实文件的网页?
【发布时间】:2017-05-11 07:28:08
【问题描述】:

天才!

我需要制作一个类似于 DBpedia (http://dbpedia.org) 的演示页面。

来自不同 URL 的两个页面,

http://dbpedia.org/page/Barack_Obama
http://dbpedia.org/page/Lionel_Messi,

显示不同的内容。

我真的不认为 DBpedia 有数百万页的所有个体实体(例如,巴拉克奥巴马和莱昂内尔梅西)。

我该如何处理这样的 URL 请求?

我对 GET 请求有所了解,但上面的示例 URL 似乎不使用 GET 方法。

提前谢谢你!

ps。请教我过程。类似的东西:
1. 用户在浏览器上输入网址。
2. ...

【问题讨论】:

  • 仍然可以是简单的GET请求。在您的示例中,它是一个 GET 请求。在服务器端,您处理这样的请求(例如):/page/{question} where question - it is a path veriable 。比服务器获取这个路径变量,使用它的神奇方法获取相关数据,生成页面并将其返回给您。处理路径变量的过程取决于您的服务器端语言和框架。

标签: url url-rewriting url-routing


【解决方案1】:

在尝试了一些解决方案后,我现在正在使用 Spring Web MVC 框架。

也许 unor 的回答中提到了动态网页解决方案。

@Controller 
public class SimpleDisplayController {

    @RequestMapping("/page/{symbolicName:[!-z]+}")
    public String displayEntity(HttpServletRequest hsr, Model model) {

        String reqPath = (String) hsr.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
        String entityLb = reqPath.substring(reqPath.lastIndexOf("/"));        

        model.addAttribute("label", entityLb);

        return "entity";

    }

}

我可以使用正则表达式获取请求,如您在第 4 行所见:@RequestMapping("/page/{symbolicName:[!-z]+}")

上面的函数返回字符串'entity',它是作为模板的HTML文件的名称。

以下代码是示例 HTML 模板的正文部分。

<body>
    <p th:text="'About entity ' + ${label} + '...'" />
</body>

由于我在上面的控制器中添加了一个带有键'label'的属性,因此模板可以处理${label}。

在示例 HTML 模板中,th:text 是 Spring 支持的 Thymeleaf(用于制作 XML/XHTML/HTML5 模板的 Java 库)的语法。

【讨论】:

    【解决方案2】:

    当访问http://dbpedia.org/page/Barack_Obama时,您的浏览器确实发送了一个GET请求,例如:

    GET /page/Barack_Obama HTTP/1.1
    Host: dbpedia.org
    

    服务器 (dbpedia.org) 接收到这个 GET 请求,然后决定做什么。 从外部看,您无法(肯定)知道服务器是如何做某事的。两种常见情况是:

    • Static web page:提供了一个文件,该文件存在于服务器上的某个位置。 URL 路径通常映射到服务器的文件系统,但not necessarily 就是这种情况。

    • Dynamic web page:提供一个动态生成的文件。内容通常来自数据库,但不一定如此。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 2019-03-18
      • 2016-09-28
      • 2013-12-04
      • 2015-04-08
      • 2015-04-25
      • 2014-12-14
      • 1970-01-01
      相关资源
      最近更新 更多