Как отправить запрос сервлету из скриптлета в JSP

Вроде простой вопрос, но он меня застрял. Я хочу выполнить сервлет из JSP, поэтому я попробовал что-то вроде следующего:

<%
    //Fetch server name port from request
    //Fetch email_addr from DB request
                   *
                   *
                   *
    //Forward request to servlet sendWelcomeMsg
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/sendWelcomeMsg?  
      recipient=" + email_addr + 
      "&contentServerName=" + request.getServerName() + 
      "&contentServerPort=" + request.getServerPort());
    rd.forward(request, response);
%>

Вышеупомянутый вид работает, если я вручную обновляю страницу, остальная часть страницы отображается, но только если я делаю обновление. Итак, мои вопросы,

  1. Есть ли лучший способ сделать это без серьезной перезаписи моего JSP?
  2. Ошибка 1. Как программно обновить страницу из скриптлета?

person FractalBob    schedule 18.01.2013    source источник


Ответы (2)


Я решил добавить на страницу форму, которая позволяет пользователю вызывать сервлет по своему желанию (сервлет отправляет приветственное сообщение, и пользователь может захотеть отправить несколько сообщений в качестве теста).

person FractalBob    schedule 18.01.2013

Пересылка из JSP в Servlet не является нормальной. По идее должно быть наоборот. В противном случае сервлет полностью берет на себя обработку ответа. Вы можете увидеть IllegalStateException ошибок в журнале сервера, когда наступит очередь JSP.

Однако вы можете включить вывод сервлета в JSP (обратите внимание, что рассматриваемый сервлет может и не должен изменять заголовки ответов):

rd.include(request, response);

Тем не менее, это не нормальная практика. Если вы намереваетесь выполнить бизнес-задачу по запросу GET перед представлением результатов в JSP, вам нужно поместить эту задачу в doGet() сервлета и позволить ей перенаправить в JSP. Сначала запрос должен попасть в контроллер, который обычно является сервлетом, который, в свою очередь, перенаправляется в представление, которое обычно является JSP. Вы можете найти пример на нашей вики-странице сервлетов.

person BalusC    schedule 18.01.2013