Я читал, что из файла jsp
внутри WEB-INF
нельзя получить доступ извне (его нужно вызывать из Servlet
).
Но почему файл welcome-file
in web.xml
указывает на файл внутри каталога WEB-INF
? так как к этому файлу можно получить доступ извне:
<welcome-file-list>
<welcome-file>WEB-INF/page.jsp</welcome-file>
</welcome-file-list>
Я тестирую Google App engine
и контейнер Servlet по умолчанию Jetty 6
.
Ответ 1
Это потому, что файл приветствия обслуживается вызовом RequestDispatcher#forward()
. Как доказательство, видите ли вы /WEB-INF/page.jsp
в адресной строке браузера? Нет? Тогда это уже определенно не является прямым запросом. Если вы попытаетесь запросить его напрямую, вы увидите, что вы получили 404.
См. также:
Несвязанный к конкретной проблеме, вы, похоже, в основном злоупотребляете <welcome-file>
, чтобы иметь "файл главной страницы". Там он не намерен. Он намерен указать единственное имя файла папки, который вы хотите обслуживать, когда была запрошена любая папка, например /
, /foo/
, /foo/bar/
и т.д. Если вы укажете index.jsp
, тогда /index.jsp
, /foo/index.jsp
, /foo/bar/index.jsp
и т.д. будет прозрачно подаваться вперед без изменения URL-адреса.