Доступ к 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.

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