【问题标题】:Broken links when deploying Clojure webapps to Jetty with relative links and non-root context path使用相对链接和非根上下文路径将 Clojure webapps 部署到 Jetty 时链接断开
【发布时间】:2012-06-13 14:13:11
【问题描述】:

我一直在尝试用 Clojure 编写 web 应用程序,直到现在都非常简单。我关注了 Chas Emerick 的出色截屏视频starting clojure,并快速启动并运行了一个 url 缩短器。接下来我希望能够部署它,这就是麻烦开始的时候。

当我在开发中运行它或将它作为根 web 应用程序部署到 Jetty 时,一切都很好,但是当我使用上下文路径部署它时,它就不行了。或者,更确切地说,它几乎可以工作。我所有的 Compojure 路由仍然有效,但 HTML 文件中的 FORM 操作链接已损坏并给我 404。

这是 Compojure 路由设置:

  (defroutes app*
    (rt/resources "/")
    (GET "/" request (homepage request))
    (POST "/shorten" request
          (let [id (shorten (-> request :params :url))]
            (response/redirect "/")))
    (GET "/:id" [id] (redirect id)))

  (def app (compojure.handler/site app*))

这是主页模板的 HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Insert title here</title>
    <link type="text/css" rel="stylesheet" href="site.css" />
</head>
<body>
    <form method="POST" action="shorten">
        <input type="text" name="url" />
        <input type="submit" value="Shorten!" />
    </form>
</body>
</html>

问题在于action="shorten"URL。当使用/example 的上下文路径部署到 Jetty 时,一切正常,直到我触发表单提交。然后 Jetty 抱怨它找不到 localhost:8080/shorten 这意味着(我认为)它没有被视为相对路径,而是绝对路径。

所以,我的问题是:如何解决这个问题?我想我可以只在操作链接中指定完整路径,但这会很不灵活,并且会使开发中的 servlet 更难运行。有没有办法配置我的出路?或者一些神奇的 URL 前缀(如 Razor 中的 ~/),可以做正确的事情?

【问题讨论】:

  • 您是否从 /example 访问该表单?由于它是您操作中的相对路径,因此您的浏览器应该在它前面加上您当前的 URI。也许加载 Firebug 或一些 HTTP 检查器,看看你是否得到了重定向。
  • 是的,我正在从 /example ... 访问它,并且 中的 css 文件正在正确提供(通过 304 重定向) - 但
    操作不是。
  • 当您单击提交时,您是否看到任何页面请求的重定向? ...就像从 /example/shorten 到 /shorten 的 301?
  • 不,触发 FORM 操作不会导致重定向 - 只是一个普通的 GET 到 /shorten
  • 这是尾部的斜线。如果您转到 /example/,则表单将发布到 /example/shorten。如果没有尾部斜杠,浏览器会将“示例”视为 / 处的文件,而表单则需要“缩短”而不是“示例”。不过,我不知道如何在您的情况下解决它。在我之前的经验中,我已经为尾部斜杠设置了重定向,事实上,当为文字目录提供请求时,Apache 将默认发送这些重定向。

标签: clojure jetty compojure ring enlive


【解决方案1】:

我有同样的问题。换行:

(POST "/shorten" request

(POST "shorten" request

它应该可以工作(嗯,它对我有用)

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 2017-08-06
    • 2014-12-12
    • 1970-01-01
    • 2012-08-05
    • 2018-02-17
    • 2022-08-12
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多