Используя серверную часть на основе 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).