Подтвердить что ты не робот

Как использовать "<% = request.getContextPath()%>" лучше, чем "../"

Я работал над количеством проектов J2EE, где уровень представления - JSP. В большинстве проектов я видел, что мы ссылаемся на внешние ресурсы, то есть изображения, javascript, jsp, css и т.д., Используя contextPath в скриптлете.

Код выглядит следующим образом:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>GC Demo Using HandlebarsJS</title>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/jqueryUI-AutoComplete/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/js/handlebarsJS/handlebars.js"></script>
    <link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.css">

Из приведенного выше jsp здесь я импортирую внешние ресурсы, которые находятся в моем же пакете проектов, то есть в моей войне.

Теперь то же самое выше JSP можно записать, как показано ниже,

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>GC Demo Using HandlebarsJS</title>
    <script type="text/javascript" src="../js/jqueryUI-AutoComplete/jquery-1.9.1.js"></script>
    <script type="text/javascript" src="../js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.js"></script>
    <script type="text/javascript" src="../js/handlebarsJS/handlebars.js"></script>
    <link rel="stylesheet" type="text/css" href="../js/jqueryUI-AutoComplete/jquery-ui-1.10.3.custom.css">

Здесь также во втором примере я ссылаюсь на ресурсы, присутствующие в моей войне.

Теперь, рассматривая оба вышеупомянутых двух случая, первый случай получил большее значение как наилучшую практику.

Почему?

и каковы недостатки использования второго случая?

Используется ли второй случай, наш проект более тесно связан с контекстом?

Пожалуйста, объясните мне.

4b9b3361

Ответ 1

request.getContextPath()- возвращает корневой путь вашего приложения, тогда как ../ - возвращает родительский каталог файла.

Вы используете request.getContextPath(), так как он всегда указывает на корень вашего приложения. Если вы должны перенести файл jsp из одного каталога в другой, ничего не нужно изменять. Теперь рассмотрим второй подход. Если вам нужно переместить файлы jsp из одной папки в другую, вам придется внести изменения в каждое место, где вы ссылаетесь на свои файлы.

Кроме того, лучшим подходом к использованию request.getContextPath() будет установка переменной request.getContextPath() в переменной и использование этой переменной для обращения к вашему пути.

<c:set var="context" value="${pageContext.request.contextPath}" />
<script src="${context}/themes/js/jquery.js"></script>

PS. Это единственная причина, по которой я могу понять. Не знаю, имеет ли какое-либо значение для него.