Доступ к JSP в подпапке в папке WEB-INF?
Я только начал работать с JSP и столкнулся с одной проблемой.
Как я понимаю, страницы JSP в WEB-INF могут быть доступны через браузер с URL-адресом в localhost:
localhost:8080/MyProject/MyJSP.jsp
Однако, если я создаю другую подпапку в папке WEB-INF (например, "MyFolder") и пытаюсь получить доступ к той же странице JSP через URL:
localhost:8080/MyProject/MyFolder/MyJSP.jsp
вместо этого выдается ошибка 404. Относятся ли системы навигации по файлам JSP, скажем, к системе навигации по файлам HTML?
РЕДАКТИРОВАТЬ: я использую сервлеты для отображения моей страницы JSP как таковой:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("MyJSP.jsp");
}
EDIT2: я изменил свое перенаправление на requestDispatcher, как мне посоветовали сделать:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/MyFolder/MyJSP.jsp");
dispatcher.forward(request, response);
}
Если мой @WebServlet ("/myjsp")
Может кто-нибудь еще получить доступ к моему MyJSP.jsp
страница, если они печатают localhost:8080/MyProject/myjsp
?
2 ответа
Как я понимаю, страницы JSP в WEB-INF могут быть доступны через браузер с URL-адресом в localhost
Нет, это как раз наоборот. Все, что находится под WEB-INF, недоступно для браузера.
Хорошей практикой является их размещение именно потому, что вы никогда не хотите, чтобы кто-либо напрямую обращался к JSP из браузера. JSP являются представлениями, и запросы должны сначала проходить через контроллер, который затем отправляет (т.е. пересылает, а не перенаправляет, см. /questions/6814349/requestdispatcherforward-protiv-httpservletresponsesendredirect) в правое представление.
'/WEB-INF/'
считается защищенной / защищенной папкой, и не рекомендуется делать ее доступной, если она действительно не требуется. Если вы все еще хотите сделать эти файлы доступными, попробуйте добавить приведенное ниже отображение сервлета в ваш файл web.xml. Надеюсь, поможет
<servlet>
<servlet-name>MyJSP</servlet-name>
<jsp-file>/WEB-INF/MyFolder/*</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>MyJSP</servlet-name>
<url-pattern>/ViewMyJsp.jsp</url-pattern>
</servlet-mapping>
Вы можете указать сопоставление явно, объявив его с элементом в дескрипторе развертывания. Вместо <servlet-class>
элемент, вы указываете <jsp-file>
элемент с путем к файлу JSP от корня WAR.