2012-11-22 48 views
0

//下面是我的servlet叫做HtmlTable。我正試圖在這裏實現類似功能的購物車。 addingItems是另一個將元素放入ArrayList中的類。每當我從網站添加一些東西時,我希望AJAX請求只調用方法jusAdding()而不是processRequest方法。這樣當有足夠的項目添加到ArrayList中時,我可以通過調用aI.getItems()將其打印在屏幕上,這會在簡單調用servlet時自動發生。可能嗎??如果是,我應該如何在AJAX請求中編寫URL。只調用一個servlet類的方法,而不是整個servlet

public class HtmlTable extends HttpServlet { 

     addingItems aI = new addingItems(); 

     public void jusAdding(HttpServletRequest request, HttpServletResponse response){ 
      aI.addItemsInCart(request, response); 
     } 
     protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      response.setContentType("text/html;charset=UTF-8"); 
      PrintWriter out = response.getWriter(); 
      List<itemsCart> itemsInCart = aI.getItemsInCart(); 

      try { 

       out.println("<html>"); 
       out.println("<head>"); 
       out.println("<title>Servlet HtmlTable</title>"); 
       out.println("</head>"); 
       out.println("<body>"); 
      //whatever content is in the itemsInCart will be displayed here in body tag 
    out.println("</body>"); 
       out.println("</html>"); 
      } finally { 
       out.close(); 
      } 
     } 



    } 

//原諒我,如果我不清楚。讓我知道我會根據讀者的方便更新。

+0

嘗試玩框架,這是可能的。 –

回答

2

你的方法都不是要由容器調用。您應該從servlet specification(或至少HttpServlet javadoc)開始。

容器調用你的servlet,這反過來,爲HttpServlet調度的方法對應於請求的HTTP方法的service()方法:doGet()doPost()等。這就是你應該勾你的邏輯(覆蓋的一個那些,或service()本身,並把你的代碼在那裏)。

爲了區分「完整頁面請求」和「AJAX請求」,您需要客戶端在該調用中包含一些鑑別符:一些請求參數具有不同的值,不同的HTTP方法或其他。一旦你有了,例如在你的doGet()方法中,你可以檢查該鑑別器,並根據客戶請求調用justAdd()processRequest()

+0

是的,這聽起來不錯。 –

+0

如果我這樣做,一旦完成jusadding()的執行完成,那麼它將不會重定向客戶端頁面。我的意思是,我正在發出一個AJAX請求的頁面,該頁面在瀏覽器中仍然保持打開狀態? –

+0

由於這是一個AJAX調用,因此即使您想要,也無法重定向頁面。這隻能通過JS回調中的顯式Javascript調用來實現。 –

3

你不能那樣做。

流經Servlet的HTTP請求將總是轉到Servlet的service方法。您需要的是將service方法用作控制器,因此它會檢查傳入請求並根據請求的參數調用jusAdding(或其他方法)。

很可能,您會希望使用已經存在的框架來做到這一點。

下應該給你更多的信息,以及一些想法如何去這樣做:How to use Servlets and Ajax?

+0

是的,這聽起來不錯。謝謝。我很感激。 –

相關問題