1

I was new to the web application. my issue: how to pass the same parameter from one JSP to two servlets? Then pass the different parameters from servlet to the same JSP?

important!! we should do the process A first then do the process B!!!!

As the project takes too many processes, I would like to separate the processes into two servlet.

Currently, I finish implement processA which is pass the search term from SEARCH PAGE JSP to SERVLET A (do the processA) and pass the result to WELCOME PAGE JSP. It works!!!(which i highlight in the red color in the picture)

the code I used: 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>

Search page JSP:

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

</form>

servletA:

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);

          }  
                }

enter image description here

So how to implement the processB into the system??? which will look like the picture i showed.

the servletB

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……………………!!!”);


}
}

thanks so much! or if the doGET and doPOST cannot be used at the same time, I can change the processA to doPost.

important!! we should do the process A first then do the process B!!!!

bob90937
  • 553
  • 1
  • 5
  • 18

1 Answers1

2

There can be only one action method(get/post etc.) for your form of SearchPage.jsp.

You as a programmer have to decide first what and how the request needs to be process instead of letting users to choose between doPost and doGet methods.

Both the methods have different purposes check the difference here

You have to keep both the processing units A and B into a single servlet(servletA/servletB),
For example: Call Process A first from JSP then call Process B from Process A and finally redirect/forward the response to Welcome.jsp from Process B
Below is the code:

Search.jsp

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

servletA:

 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);  
  }

Note: you can do viceversa, that is call doPost first and later doGet as per your requirement. Also, need to change method="post" in form tag for this.


For your query in comments use the below code:

servletA:

 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 
      }

servletB:

 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);  
  }
Community
  • 1
  • 1
Rohit Gaikwad
  • 3,677
  • 3
  • 17
  • 40
  • Thanks for your sharing. I got the idea. but in your case, you combine servletA and servletB as the "new servletA". however, I would like to keep two servlets . is it possible to use "response.sendRedirect( serveletB)" in the servletA ?? – bob90937 Nov 11 '16 at 05:29
  • For this, you can keep two servlets by processing `servletA` first then use `requestdispatcher` to call `serlvetB` instead of redirect so that parameter values will be as it is. Later dispatch the request from `serlvetB` to welcome.jsp. Here, is an example where two servlets are used login and welcomeServlet http://www.javatpoint.com/requestdispatcher-in-servlet – Rohit Gaikwad Nov 11 '16 at 05:39