Передача сервлетов

Я использую в своем проекте обитую причал и придумал несколько проблем. У меня эти две страницы:

  • index.jsp
  • result.jsp

И эти два сервлета:

  • загружать
  • поиск

В índex.jsp есть форма для загрузки файла и процесса загрузки в дескрипторе загрузочного сервлета, но затем я должен вернуть сообщение в файл índex.jsp, чтобы узнать, была ли сделана загрузка.

request.setAttribute("message", "Upload Sucedded!");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
rd.forward(request, response);

Это перенаправляет сообщение на страницу índex, но url будет /upload, и я хотел бы быть índex. Итак, есть еще один способ структурирования моих файлов и, возможно, сделать мой приветственный файл сервлетом, а не índex.jsp?

2 ответа

Это не имеет ничего общего с Jetty. Это поведение по умолчанию для пересылки.

Уродливое решение:

Если вы хотите переписать свой URL-адрес, используйте перенаправление вместо этого и передайте параметр по сеансу. После отображения сообщения удалите его из сеанса.

Лучшее решение:

Измените имя загружаемого сервлета с помощью IndexServlet. Этот сервлет будет обрабатывать запросы GET и POST для вашей страницы index.jsp. В конце обработки вы перейдете на страницу JSP. Сделав это, вы можете напрямую отправить форму на свою текущую страницу:

<form action="index.jsp" method="POST" enctype="multipart/form-data">
 <!-- your fields ... -->
</form>

Тогда ваш сервлет:

@WebServlet("index.jsp")
public class IndexServlet extends HttpServlet {
 //using ... to avoid parameters and exceptions to be thrown
 @Override
 public void doGet(...) throws ... {
 //this method should only forward to your view
 RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
 rd.forward(request, response);
 }

 //using ... to avoid parameters and exceptions to be thrown
 @Override
 public void doPost(...) throws ... {
 //current implementation...
 //in the end, forward to the same view
 request.setAttribute("message", "Upload Sucedded!");
 RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
 rd.forward(request, response);
 }
}

Больше информации:


Простейшим решением было бы изменить загрузку сервлета, чтобы использовать перенаправление и использовать параметр запроса вместо атрибута следующим образом:

// upload servlet
response.sendRedirect("index.jsp?message=YourMessage");

Затем в index.jsp используйте request.getParameter("message") или EL, чтобы отобразить ваше сообщение.

licensed under cc by-sa 3.0 with attribution.