как передать один и тот же параметр из одного JSP в два сервлета? Затем передать разные параметры из сервлета в тот же JSP?

Я был новичком в веб-приложении. моя проблема: как передать один и тот же параметр из одного JSP в два сервлета? Затем передать разные параметры из сервлета в тот же JSP?

важный!! мы должны сначала выполнить процесс А, а затем выполнить процесс Б!!!!

Поскольку проект требует слишком много процессов, я хотел бы разделить процессы на два сервлета.

В настоящее время я заканчиваю реализацию процесса A, который передает условие поиска из JSP SEARCH PAGE в SERVLET A (выполняет процесс A) и передает результат в WELCOME PAGE JSP. Работает!!!(выделено красным на картинке)

код, который я использовал: Web.xml

  <servlet>
    <servlet-name>ServletA</servlet-name>
    <servlet-class>test.processA</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletA</servlet-name>
    <url-pattern>/download result</url-pattern>
  </servlet-mapping>

Страница поиска JSP:

<form   action="download result">           
             Please enter a Keyword <br> 
            <input type="text" name="term"size="20px">
            <input type="submit" value="submit">

</form>

сервлет А:

public class processA  extends HttpServlet { 
     protected void doGet(HttpServletRequest request, 
              HttpServletResponse response) throws ServletException, IOException 
          {
            // reading the user input

            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            // Retrieve search term from GET request and parse to desired format
            String searchTerm = (request.getParameter("term").toString()).replace("%20", "_").replace(" ", "_").replace("+", "_").replace(".", "");
            System.out.println("=====(servlet) searchTerm is:"+searchTerm);

  }

              protected void doPost(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, IOException 
                  {
                 doGet(request, response);

          }  
                }

введите здесь описание изображения

Итак, как внедрить процесс B в систему??? который будет выглядеть как на картинке, которую я показал.

сервлетB

public class processB extends HttpServlet {
    protected void doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
          {
            doPost(request,response);
          }


    protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
      {



        String searchTerm = (request.getParameter("term")).replace(" ", "_");
        String queryTerm = request.getParameter("term");

        System.out.println("=====(servlet) searchTerm is:"+searchTerm);

System.out.println("=====(servlet) keep doing the other process……………………!!!”);


}
}

Спасибо! или если doGET и doPOST нельзя использовать одновременно, я могу изменить processA на doPost.

важный!! мы должны сначала выполнить процесс А, а затем выполнить процесс Б!!!!


person bob90937    schedule 11.11.2016    source источник
comment
В servletA вместо перенаправления на jsp перенаправьте на servletB   -  person Scary Wombat    schedule 11.11.2016
comment
Вы имеете в виду использование servletA, вызовите servletB и передайте String searchTerm от servletA до servletB???   -  person bob90937    schedule 11.11.2016
comment
см. stackoverflow.com/questions/5539176/   -  person Scary Wombat    schedule 11.11.2016


Ответы (1)


Для вашей формы SearchPage.jsp может быть только один метод действия (получить/отправить и т. д.).

Вы, как программист, должны сначала решить, что и как должен обрабатывать запрос, вместо того, чтобы позволять пользователям выбирать между doPost и doGet методами.

Оба метода имеют разные цели, проверьте разницу здесь

Вы должны сохранить оба процессора A и B в одном сервлете (servletA/servletB),
Например: сначала вызовите Process A из JSP, затем вызовите Process B из Process A и, наконец, перенаправьте/перенаправите ответ на Welcome.jsp от Process B
Ниже приведен код:

Search.jsp

<form action="download result" method="get">
...
</form>

сервлетA:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
      {
        ... //processing logic of A
        ... //processing logic of A
        ... //processing logic of A
        doPost(request,response);//call Post 
      }
 protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
  {
        ... //processing logic of B
        ... //processing logic of B
        ... //processing logic of B

        RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");  
        rd.forward(request, response);  
  }

Примечание: вы можете сделать наоборот, то есть сначала вызвать doPost, а затем doGet в соответствии с вашими требованиями. Также для этого нужно изменить method="post" на form tag.


Для вашего запроса в комментариях используйте следующий код:

сервлетA:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
      {
        ... //processing logic of A
        ... //processing logic of A
        ... //processing logic of A
        RequestDispatcher dispatcher = null;
        dispatcher=request.getRequestDispatcher("servletB");
        dispatcher.forward(request, response);//call Post 
      }

сервлетB:

 protected void doPost(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
  {
        ... //processing logic of B
        ... //processing logic of B
        ... //processing logic of B

        RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp");  
        rd.forward(request, response);  
  }
person Rohit Gaikwad    schedule 11.11.2016
comment
Спасибо, что поделились. Я получил идею. но в вашем случае вы объединяете servletA и servletB как новый servletA. однако я хотел бы сохранить два сервлета. можно ли использовать response.sendRedirect(servletB) в servletA?? - person bob90937; 11.11.2016
comment
Для этого вы можете сохранить два сервлета, сначала обработав servletA, а затем использовать requestdispatcher для вызова serlvetB вместо перенаправления, чтобы значения параметров были такими, какие они есть. Позже отправьте запрос от serlvetB на welcome.jsp. Вот пример использования двух сервлетов: login и welcomeServlet javatpoint.com/requestdispatcher-in-servlet - person Rohit Gaikwad; 11.11.2016