Неопределенный строковый литерал из getServletContext(). GetRealPath("/") в JSP

Это ошибка, которая возникла после того, как я получил ответ на предыдущий вопрос. По сути, я пытаюсь взять с собой absPath папки, чтобы я мог создавать некоторые файлы во время выполнения независимо от того, где находится мой код. Мне порекомендовали использовать

getServletContext().getRealPath("/");

Чтобы найти правильный путь.

Я попробовал это на своей странице JSP, но я получаю неопределенный строковый литерал прямо при создании переменной absPath. Вот сценарий, который я пытаюсь запустить.

<script type="text/javascript">
        var RemoteUserId = "<%=(request.getRemoteUser()==null)? "blah" : request.getRemoteUser()%>";
        var contextPath = "<%= request.getContextPath()%>";         
        var extPath = "<%=extPath%>";
        var absPath = "<%=getServletContext().getRealPath("/")%>";
        var env='<%=string1%>';
</script>

Что мне не хватает? Должен ли я экранировать возвращенное имя пути, или я неправильно истолковал, когда должен был это использовать.

Изменить ** Это то, что источник показывает при доступе к странице
(слегка подправлен, поэтому я не показываю полный путь C:)

<script type="text/javascript">
        var RemoteUserId = "blah";
        var contextPath = "/TRACK";         
        var extPath = "http://xxx/sales/it/tlp/ext-3.2.1";
        var env='null';
        var absPath = "C:\Documents and Settings...\TRACK\";
</script>

1 ответ

Решение

Как и в Java, обратные слэши - это escape-символы в JS. Вы должны избегать их, чтобы представлять буквальную обратную косую черту. Другими словами, ваш absPath переменная должна заканчиваться как

var absPath = "C:\\Documents and Settings...\\TRACK\\";

Вы можете сделать это путем

var absPath = "<%=getServletContext().getRealPath("/").replace("\\", "\\\\")%>";

Но все же, для меня нет смысла передавать переменную Java обратно в Java через JavaScript. Просто получите доступ к нему на стороне Java, когда код собирается обработать запрос. Представьте, что вы используете сервлет для обработки запроса, просто сделайте

String absPath = getServletContext().getRealPath("/");

вместо

String absPath = request.getParameter("absPath");

(или что вы делаете, чтобы получить absPath обратно в ваш код Java)

Также обратите внимание, что весь код JavaScript полностью контролируется / подделывается / может быть взломан клиентом. Клиент может редактировать переменные JavaScript во время выполнения кода. Клиент может, например, изменить путь до того, как он будет использован. Имейте это в виду!

Другие вопросы по тегам