【问题标题】:Writing applications with clean URL使用干净的 URL 编写应用程序
【发布时间】:2013-05-27 20:54:50
【问题描述】:

我想以如下方式在网站中显示文章

example.com/articles/23/thetitle

ie  example.com/articles/{id}/{title}

对于每个请求,真正重要的是 id。我将显示与 id 对应的文章,显示标题是为了便于阅读。现在的问题是,当用户在浏览器中编辑 url 时,比如从 example.com/articles/23/thetitleexample.com/articles/23/xyz 并重新加载,相同的内容会使用新的 url 加载。

我该如何解决这个问题?如何让我的 URL 显示为 example.com/articles/23/thetitle 条目 example.com/articles/23/{anything}

我查看了URLrewriting。但这似乎不是我的解决方案。

我能想到的唯一解决方案是用 javascript 来做,但恕我直言很脏。

我正在使用 Spring MVC。提前致谢

PS: 总而言之,我希望它能够像在 SO 中那样工作。如果我们编辑问题编号并重新加载,则会加载新标题。

这是我当前如何获取文章的代码示例

@RequestMapping(value = "/{id}/{title}", method = RequestMethod.GET)
public 
String loadArticle(HttpServletRequest request,
        @PathVariable Long id, Model model) {
    //get the article
    model.addAttribute("article", article);
    return "article";
    }

【问题讨论】:

    标签: java spring rest spring-mvc clean-urls


    【解决方案1】:

    我会使用一个 servlet 来检查 URL 并发送一个 HTTP 重定向响应代码(方法 sendRedirectHttpServletResponse

    【讨论】:

    • 一个用于处理所有 /articles/* URL 的 http 过滤器。当请求到达时,它会检查请求中的 URL 是否有效。如果不是,则发送一个重定向到正确的 URL,以便浏览器请求正确的 URL(这将使浏览器更改 URL)。您也可以在 servlet 中执行逻辑,但使用过滤器更有意义。
    • 如果标题不同,你是在告诉我做一个 response.sendRedirect("example.com/articles/23/thetitle") 吗?
    • 好的。有道理:) 所以在过滤器或 servlet 中,我必须首先检查传递的标题是否正确,如果不正确,我必须用新标题重定向它。对不对?
    • 是的。我会在过滤器中这样做,因为a)它更干净和模块化,并且b)我不确定URL重写器是否会在处理它时将请求中的URL更改为servlet(虽然你可以很容易地检查) .
    • 另外,我一直在检查您提供的链接。虽然文档有点晦涩难懂,但也许 class-rule 可以为您做到这一点。遗憾的是,该示例的链接已损坏。
    猜你喜欢
    • 2016-04-24
    • 2012-12-24
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多