2016-11-11 103 views
1

我是新來的Web應用程序。 我的問題:如何將相同的參數從一個JSP傳遞到兩個servlet?然後將不同的參數從servlet傳遞給相同的JSP?如何將同一個參數從一個JSP傳遞到兩個servlet?然後將不同的參數從servlet傳遞給相同的JSP?

重要!我們應該先做這個過程A然後做B的過程!

由於項目需要太多的進程,我想將進程分成兩個servlet。

目前,我完成了將搜索詞從SEARCH PAGE JSP傳遞給SERVLET A(執行processA)並將結果傳遞給WELCOME PAGE JSP的processA。它的工作原理!!!(我突出了紅色的圖片)

我使用的代碼: 在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> 

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

那麼如何實現processB到系統中?這看起來就像我展示的圖片。

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


} 
} 

非常感謝! 或者如果doGET和doPOST不能同時使用,我可以將processA更改爲doPost。

重要!我們應該先做這個過程A然後做B的過程!

+0

在servletA,而不是轉發到jsp,重定向到servletB –

+0

你的意思是使用servletA調用servletB並將字符串searchTerm從servletA傳遞到servletB? – bob90937

+0

請參閱http://stackoverflow.com/questions/5539176/sending-redirect-to-another-servlet-jsp-without-loosing-the-request-parameters –

回答

2

對於您的SearchPage.jsp形式,只能有一個動作方法(獲取/發佈等)。

作爲一名程序員,您必須首先決定處理請求的方式和方式,而不是讓用戶在doPostdoGet方法之間進行選擇。

這兩種方法具有不同的目的,檢查差here

你必須處理單元A和B都保持成一個單一的servlet(servletA/servletB)
例如:呼叫Process A第一從JSP然後調用從Process AProcess B最後重定向/轉發來自Process B
下面以Welcome.jsp的響應代碼:

搜索。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); 
    } 

注:你可以做反之亦然,即調用doPost首爾後doGet按您的要求。此外,爲此需要更改method="post"form tag


對於評論查詢中使用下面的代碼:

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

感謝您的分享。我明白了。但就你而言,你可以將servletA和servletB組合爲「新servletA」。不過,我想保留兩個servlet。是否可以在servletA中使用「response.sendRedirect(serveletB)」?? – bob90937

+0

爲此,您可以先通過處理'servletA'來保留兩個servlet,然後使用'requestdispatcher'來調用'serlvetB'而不是重定向,以便參數值保持原樣。稍後從'serlvetB'向welcome.jsp發送請求。這裏是兩個servlet用於登錄和welcomeServlet的示例http://www.javatpoint.com/requestdispatcher-in-servlet –

相關問題