Используя основанный на Java бэкенд (т.е. сервлеты и JSP), если мне нужен contextPath от JavaScript, каков рекомендуемый шаблон для того, чтобы сделать это, кто-либо почему? Я могу думать о нескольких возможностях. Я скучаю по кому-либо?
1. Запишите ТЕГ SCRIPT в страницу, которая устанавливает его в некоторой переменной JavaScript
<script>var ctx = "<%=request.getContextPath()%>"</script>
Это точно, но требует выполнения сценария при загрузке страницы.
2. Установите contextPath в некоторых скрытый элемент DOM
<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>
Это точно, и не требует никакого выполнения сценария при загрузке страницы. Но Вам действительно нужен запрос DOM когда потребность получить доступ к contextPath. Результат запроса DOM может кэшироваться, если Вы заботитесь так очень о производительности.
3. Попытайтесь понять это в JavaScript путем исследования document.URL
или Тег BASE
function() {
var base = document.getElementsByTagName('base')[0];
if (base && base.href && (base.href.length > 0)) {
base = base.href;
} else {
base = document.URL;
}
return base.substr(0,
base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1));
};
Это не требует никакого выполнения сценария при загрузке страницы, и можно также кэшировать результат при необходимости. Но это только работает, если Вы знаете, что Ваш путь контекста является единственным каталогом - в противоположность корневому каталогу (/
) или несколько каталогов вниз (/mypath/iscomplicated/
).
Какой путь я склоняюсь
Я одобряю скрытый элемент DOM, потому что он не требует выполнения кода JavaScript при загрузке страницы. Только, когда мне нужен contextPath, будете, я должен выполнить что-либо (в этом случае, выполнить запрос DOM).