Неопределенный строковый литерал из 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 во время выполнения кода. Клиент может, например, изменить путь до того, как он будет использован. Имейте это в виду!