Tomcat6 response.sendRedirect () 404 ошибка - PullRequest
0 голосов
/ 04 января 2012

Мне было интересно, сталкивался ли кто-нибудь с этой проблемой, и если да, могут ли они предоставить мне решение.

У меня есть страница index.jsp, которая находится за пределами WEB-INF.папка и состоит из следующего кода:

<html>
   <body>
      <%response.sendRedirect("home.htm");%>
   </body>
</html>

Страница должна перенаправить на «home.jsp», который находится внутри папки WEB-INF.

Проблема, с которой я сталкиваюсь, заключается в том, что когдаЯ развертываю свое приложение в tomcat с помощью Eclipse, перенаправление работает!

Однако, когда я запускаю свое приложение в tomcat, запустив файл startup.sh из папки tomcat / bin, я получаю «HTTP Status 404».ошибка.

Я использую Tomcat 6.0.33

Ответы [ 4 ]

1 голос
/ 04 января 2012

Файлы в папке /WEB-INF не являются общедоступными. Эта папка предназначена для ресурсов, к которым веб-браузер не должен обращаться напрямую, таких как файлы JSP, файлы JSP, для которых требуется предварительная обработка (фронт-контроллер) servlet , и так далее.

Ваш home.jsp выглядит как обычный JSP-файл, доступ к которому предполагается получить напрямую через URL. Итак, поместите его вне папки /WEB-INF. Таким образом, он просто доступен по http://localhost:8080/context/home.jsp.

Что касается вашего конкретного требования, разрешить перенаправление index.jsp на что-то другое действительно не имеет смысла. Просто измените параметр <welcome-file> в web.xml на home.jsp вместо index.jsp.

<welcome-file-list>
    <welcome-file>home.jsp</welcome-file>
</welcome-file-list>

Таким образом, home.jsp будет открыт, когда конечный пользователь непосредственно зайдет в папку http://localhost:8080/context без указания файла ресурса.

О, обратите внимание, что расширение .htm отличается от расширения .jsp. При необходимости исправьте это также.

0 голосов
/ 04 января 2012

Прежде всего, начальная страница, на которую нужно перейти, контролируется в файле web.xml элементом. В автономном Tomcat по умолчанию используется /index.html, затем /index.htm и, наконец, /index.jsp.

.

Может случиться так, что когда вы запускаете tomcat из Eclipse, веб-плагин делает свое дело со стандартным файлом web.xml, поэтому значения по умолчанию могут немного отличаться.

Во-вторых, если вы просто хотите, чтобы index.jsp перенаправлял на home.htm, вам не следует заключать скриптлет в теги разметки HTML. Если tomcat решит сбросить вывод перед выполнением вашего скриптлета, метод sendRedirect () будет проигнорирован, так как заголовки HTTP уже будут записаны.

Наконец, я предполагаю, что в вашем веб-приложении настроено какое-то отображение, которое обрабатывает запрос home.htm и перенаправляет его на home.jsp?

0 голосов
/ 04 января 2012

Почему вы ожидаете, что он будет перенаправлен на home.jsp, если аргумент sendRedirect равен home.htm?Есть ли опечатка?Если файл на самом деле находится под WEB-INF, он не будет доступен для браузера.Раскрытие содержимого WEB-INF миру откроет многочисленные потенциальные дыры в безопасности.Вам нужно будет сделать следующее, если вы хотите, чтобы home.jsp включал содержимое WEB-INF/home.htm:

<jsp:include page="/WEB-INF/home.htm" />
0 голосов
/ 04 января 2012

Если вы хотите перенаправить на «home.jsp», вы должны написать «home.jsp» в качестве параметра sendRedirect.

...