Apache Tomcat: запрошенный ресурс () недоступен (при доступе к ресурсу, который должен быть доступен) - PullRequest
6 голосов
/ 01 марта 2012

Это мой первый вопрос здесь (так что будьте нежнее :)). Я искал повсюду и не могу найти ответ на мою проблему (тоже немного сошел с ума в процессе).

Я использую Tomcat 7 и последнюю версию Eclipse IDE для разработчиков Java EE (платформа Eclipse 3.7.2 и Java EE IDE 1.4.2). Итак, я получаю эту ошибку: «Запрошенный ресурс () недоступен» при доступе к http://127.0.0.1:8080/myTest/WEB-INF/jsp/savename.jsp. Я много раз проверял, что этот файл находится на диске в той же папке. Я попытался запустить Tomcat внутри Eclipse и развернуть экспортированный .war в Tomcat. Каждый раз появляется одна и та же ошибка.

Мои файлы:

myTest/index.jsp
myTest/WEB-INF/html/GetName.html
myTest/WEB-INF/jsp/savename.jsp

Когда я запускаю "http://localhost/myTest" index.jsp всегда работает правильно. Тогда я использую

"<jsp:forward page="WEB-INF/html/GetName.html"></jsp:forward>"

внутри моего index.jsp, чтобы перейти к GetName.html, и это тоже работает. Проблема появляется в GetName.html:

<form  action='WEB-INF/jsp/savename.jsp' method="post" >
What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20>
<P><INPUT TYPE=SUBMIT>
</form>

Когда я нажимаю кнопку отправки в форме, браузер перенаправляет на: http://127.0.0.1:8080/myTest/WEB-INF/jsp/savename.jsp и появляется ошибка.

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

P.S. Я пробовал также ручную навигацию по файлам:

http://127.0.0.1:8080/myTest/WEB-INF/html/GetName.html
http://127.0.0.1:8080/myTest/WEB-INF/jsp/savename.jsp

но я также получаю сообщение об ошибке (даже если idex.jsp также без проблем переходит на GetName.html) ..

Любая помощь очень ценится! Спасибо !!

1 Ответ

4 голосов
/ 01 марта 2012

Вы не можете напрямую перейти к каким-либо файлам / артефактам, размещенным в каталоге WEB-INF (также действует для META-INF). Это функция безопасности механизма сервлетов: контент в WEB-INF защищен и недоступен из "извне" через URL-адреса. Кроме того, любой может прочитать конфиденциальные данные, такие как конфигурация приложения / базы данных и т. Д., Просто собрав соответствующие URL-адреса.

Причина, по которой тег "jsp: forward" все еще может обращаться к файлам в / в каталоге WEB-INF, заключается в том, что forward выполняет на сервере внутренне , т.е. Механизм сервлета и index.jsp выполнены, поэтому механизм сервлета выполнил свои обязанности по обеспечению безопасности и теперь является автором, например, index.jsp отвечает за решение, какие файлы должны быть доступны.

PS
Помимо использования тегов "jsp: forward", вы можете использовать директиву include (статическое включение), например,

<%@ include file=”/WEB-INF/dir/file.extension” %>

или тег JSP включения (динамическое включение), например

<jsp:include page=”/WEB-INF/dir/file.extension” />

Различия между этими двумя типами включают в себя поиск, хорошие результаты будут, например, http://java.sun.com/products/jsp/tags/11/syntaxref117.html
http://java.sun.com/products/jsp/tags/11/syntaxref1112.html
http://www.coderanch.com/how-to/java/IncludesActionDirective
http://docs.oracle.com/cd/B14099_17/web.1012/b14014/keydev.htm#i1005631

...