使用相对链接和非根上下文路径将Clojure webapps部署到Jetty时断开链接

时间:2012-06-10 07:53:12

标签: clojure jetty compojure ring enlive

我一直在尝试在Clojure中编写webapps,直到现在它还很容易。我按照Chas Emerick的精彩电视节目starting clojure进行了调整,并将网址缩短并快速运行。接下来我希望能够部署它,那就是麻烦开始的时候。

当我在开发中运行它或将其作为根webapp部署到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"网址。当使用上下文路径/example部署到Jetty时,一切正常,直到我触发表单提交。然后Jetty抱怨它找不到localhost:8080/shorten这意味着(我认为)它不被视为相对路径,而是绝对路径。

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

1 个答案:

答案 0 :(得分:0)

我有同样的问题。改变这一行:

(POST "/shorten" request

(POST "shorten" request

它应该有用(好吧,它对我有用)

相关问题