Использование back-end на основе Java (т.е. сервлетов и JSP), если мне нужен contextPath из JavaScript, каков рекомендуемый шаблон для этого, почему? Я могу придумать несколько возможностей. Я что-то не хватает?
1. Запишите тег SCRIPT на страницу, которая устанавливает его в некоторой переменной JavaScript
<script>var ctx = "<%=request.getContextPath()%>"</script>
Это точно, но при загрузке страницы требуется выполнение SCRIPT.
2. Установите contextPath в некоторый скрытый элемент DOM
<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>
Это точно и не требует выполнения SCRIPT при загрузке страницы. Но вам нужен запрос 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));
};
Это не требует выполнения SCRIPT при загрузке страницы, и вы также можете кэшировать результат, если это необходимо. Но это работает только в том случае, если вы знаете, что ваш контекстный путь - это единственный каталог - в отличие от корневого каталога (/
) или нескольких каталогов вниз (/mypath/iscomplicated/
).
В каком направлении я склоняюсь
Я предпочитаю скрытый элемент DOM, потому что он не требует выполнения кода JavaScript при загрузке страницы. Только когда мне понадобится contextPath, мне нужно будет что-нибудь выполнить (в этом случае запустите запрос DOM).