gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:14:58 24 4
gpt4 key购买 nike

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

当我在开发中运行它或将它作为根 webapp 部署到 Jetty 时,一切都很好,但是当我使用上下文路径部署它时,它没有。或者,更确切地说,它几乎有效。我所有的 Compojure 路由仍然有效,但 FORM HTML 文件中的操作链接已损坏并给我 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"网址。当部署到 Jetty 时,上下文路径为 /example一切正常,直到我触发表单提交。然后Jetty提示找不到 localhost:8080/shorten这意味着(我认为)它不被视为相对路径,而是绝对路径。

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

最佳答案

我有同样的问题。更改行:

(POST "/shorten" request


(POST "shorten" request

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

关于clojure - 使用相对链接和非根上下文路径将 Clojure webapps 部署到 Jetty 时链接断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com