2

我注意到 SO 生成它的 url 非常好,比如说在创建问题时,url 是这样的http://stackoverflow.com/questions/ask或者在查看问题时http://stackoverflow.com/questions/QUESTIONNUM/some-question-title

Stackoverflow 是如何实现如此优雅的 url 的,它的 url 中没有任何查询字符串,即使没有查询字符串,它仍然可以识别正在访问的页面或问题编号。我想在我的应用程序中实现这样的 url。

我的问题是如何在应用程序中实现这一点?我正在使用 Apache Tomcat 和 Struts2。

4

2 回答 2

2

StackOverflow 是用ASP.NET MVC构建的。它使用ASP.NET 路由。这个 url 的重要部分是QUESTIONNUM. 这就是用来查询数据库和检索问题编号的。问题标题是完全任意的。例如,这两个 url 都指向完全相同的位置:

因此,基本上,当生成给定问题的链接时,问题 ID 用于从数据库中检索问题详细信息(例如问题的标题),并使用 ASP.NET MVC 中的 HTML 帮助程序构建正确的 url。由于问题的标题可能包含任意字符,因此通过 a 过滤此标题regular expression以删除危险字符并将其替换为安全的等效字符。

于 2012-12-23T13:25:47.517 回答
2

您始终可以编写自己的ActionMapper并使用而不是默认映射器,如下所示:

<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myMapper" class="com.company.MyActionMapper" />
<constant name="struts.mapper.class" value="myMapper" />
于 2012-12-28T07:24:43.593 回答