Запрошенный ресурс (/xxx.html) недоступен при перенаправлении

Я действительно делаю свою домашнюю работу, чтобы понять, почему, но я все еще борюсь. Пожалуйста помоги!

У меня есть сервлет, который работает без каких-либо страниц до сегодняшнего дня (tomcat 7 и eclipse)

Теперь я надеюсь попробовать добавить несколько страниц и перенаправить на них. Я добавил строку

response.sendRedirect("/userhelp.html");

Чтобы проверить, работает ли страница, но это не так.

Я помещаю свой userhelp.html в папку WebContent. Для теста я попытался скопировать его в WEB-INF, ни один из них не работает.

И если я заменю «/userhelp.html» на «userhelp.html», у него не будет страницы с ошибкой, но будет «рекурсивная переадресация».

Ниже мой код, который является относительным.

@WebServlet(name="core",urlPatterns={"/"})
public class CoreServlet extends HttpServlet {


protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    response.setCharacterEncoding("UTF-8");
    response.sendRedirect("/userhelp.html");    

person JaskeyLam    schedule 26.07.2014    source источник
comment
А рекурсивный редирект значит?   -  person Abhijeet Panwar    schedule 26.07.2014
comment
Извините, так как мой хром - это китайская версия, поэтому я просто перевожу его, это должно означать PageA-->PageA-->PageA-->PageA.... что-то вроде этого, потому что я вижу, что мой кот работает с пустым для долгое время с зеленой полосой процесса. Но я думаю, что это должно работать для /userhelp.html, почему 404? Пожалуйста, помогите!   -  person JaskeyLam    schedule 26.07.2014


Ответы (1)


Вам нужно отредактировать sendrederct на:

response.sendRedirect("/ProjectName/userhelp.html");

У вас есть response.sendRedirect("/userhelp.html"); Аргумент вашего sendRedirect начинается с косой черты. Это означает, что «относительно корня контейнера». Таким образом, контейнер создает URL-адрес относительно исходного URL-адреса запроса.

Ваша страница userhelp.html выходит из веб-контента вашего проекта. Относительный путь от корня контейнера должен быть /Projectname/userhelp.html. Поэтому вам нужно отредактировать свой путь в response.sendRedirect.

Изменить: проблема заключается в сопоставлении вашего сервлета, поскольку @servletmapping(/) означает, что все, что приходит для этого шаблона URL-адреса (/), должно быть отправлено на этот сервлет. Так что на самом деле происходит, когда ваш сервлет вызывается в первый раз и ответ. вызывается sendredirect() , создается новый объект запроса, и путь для него / , поэтому снова вызывается ваш сервлет, и начинается этот рекурсивный процесс.

Таким образом, решение для этого состоит в том, чтобы изменить сопоставление сервлета на: @servletmapping(/test), а затем вызвать этот сервлет, вызвав yourlocalhost/test/. Поэтому, когда на этот раз перенаправление выполнено, сервлет для этого не вызывается.

person Abhijeet Panwar    schedule 26.07.2014
comment
это не работа для меня. Когда я использую project/userhelp.html, у меня возникает странная ситуация: когда у меня есть журнал, введите doget, когда введите метод doGet (), и он просто продолжает печатать введите doget для вашего решения, и ничего не выходит! - person JaskeyLam; 26.07.2014
comment
Как вы назвали свой сервлет? Пожалуйста, опубликуйте свой код, который вызывает ваш сервлет. - person Abhijeet Panwar; 26.07.2014
comment
Что вы имеете в виду, называется, журнал печатается, поэтому метод do get включен. - person JaskeyLam; 26.07.2014
comment
Да, это в , но почему он «непрерывно» печатает ввод doget? Ваш сервлет вызывается повторно? Если да, то я думаю, что это причина для этого. Даже вы упомянули в своем вопросе о рекурсивной странице. Я думаю, что проблема в чем-то еще - person Abhijeet Panwar; 26.07.2014
comment
Но проблема в том, почему он повторяется. Если я удалю этот код (перенаправление), все будет в порядке - person JaskeyLam; 26.07.2014
comment
Эй, попробуйте поставить возврат после response.sendRedirect :) - person Abhijeet Panwar; 26.07.2014
comment
Давайте продолжим обсуждение в чате. - person JaskeyLam; 26.07.2014