Stackoverflow与Struts2或JSP的URL一样

时间:2012-12-23 13:19:00

标签: java jsp url-rewriting struts2

我注意到SO非常好地生成了它的网址,让我们说在创建问题时,网址就像这个http://stackoverflow.com/questions/ask或查看问题http://stackoverflow.com/questions/QUESTIONNUM/some-question-title

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

我的问题如何在应用程序中实现此功能?我正在使用Apache Tomcat和Struts2。

2 个答案:

答案 0 :(得分:2)

StackOverflow使用ASP.NET MVC构建。它使用ASP.NET routing。此网址的重要部分是QUESTIONNUM。这是用于查询数据库和检索问题编号的内容。问题标题完全是任意的。例如,这两个网址指向完全相同的位置:

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

答案 1 :(得分:2)

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

<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myMapper" class="com.company.MyActionMapper" />
<constant name="struts.mapper.class" value="myMapper" />