Я экспериментировал с написанием webapps в Clojure, и до сих пор это было довольно легко. Я следил за превосходным скринкастом Chas Emerick starting clojure и быстро и быстро запустил укороченный переводчик. Затем я хотел иметь возможность развернуть его, и вот тогда началось беда.Неработающие ссылки при развертывании Clojure webapps на Jetty с относительными ссылками и корневым контекстом path
Когда я запускаю его в разработке или развертываю на Jetty в качестве корневого webapp, все в порядке, но когда я его развертываю с помощью контекстного пути, это не так. Или, скорее, он почти работает. Все мои маршруты 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"
URL. При развертывании на Jetty с контуром /example
все работает нормально, пока я не запускаю форму submit. Затем Джетти жалуется, что не может найти localhost:8080/shorten
, что означает (я думаю), что он не рассматривается как относительный путь, а абсолютный.
Итак, мой вопрос: как это исправить? Думаю, я мог бы просто указать полный путь в ссылке на действие, но это было бы негибким и усложняло бы запуск сервлета в процессе разработки. Есть ли способ настроить мой выход из этого? Или какой-то магический URL-префикс (например, ~/
в Razor), который будет делать правильные вещи?
Вы доступ к этой форме из/например? Поскольку это относительный путь в вашем действии, ваш браузер должен добавить его с вашим текущим URI. Возможно, загрузите Firebug или какой-нибудь HTTP-инспектор и посмотрите, получаете ли вы перенаправление. – mqsoh
Да, я обращаюсь к нему из примера ... и файл css в
обслуживается корректно (через перенаправление 304), но действиеКогда вы нажимаете кнопку «Отправить», вы видите какие-либо переадресации на запросы страниц? ... как 301 из примера/сократить/сократить? – mqsoh