仅调用servlet类的方法而不是整个servlet

时间:2012-11-22 09:18:17

标签: java ajax servlets

//下面是我的名为HtmlTable的servlet。我想在这里实现类似购物车的功能。 addingItems是另一个将元素放在ArrayList中的类。每当我从网站添加内容时,我都希望AJAX请求只调用方法jusAdding()而不是processRequest方法。因此当将足够的项添加到ArrayList时,我可以通过调用aI.getItems()在屏幕上打印它,这将在调用servlet时自动发生。可能吗??如果是,我应该如何在AJAX请求中写入URL。

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



    }

//如果我不清楚,请原谅我。让我知道我会根据读者的方便更新。

2 个答案:

答案 0 :(得分:3)

你做不到。

流经Servlet的HTTP请求总是转到Servlet的service方法。您需要的是使用service方法作为控制器,因此它会检查传入的请求并根据请求的参数调用jusAdding(或其他方法)。

最有可能的是,您需要使用已有的框架来实现这一目标。

以下内容应该为您提供更多信息,以及如何执行此操作的一些想法:How to use Servlets and Ajax?

答案 1 :(得分:2)

容器不会调用任何方法。您应该从servlet specification(或至少HttpServlet javadoc)开始。

容器调用servlet的service()方法,而HttpServlet方法将doGet()调度到与请求HTTP方法对应的方法:doPost()service()等那就是你应该把你的逻辑挂钩的地方(覆盖其中一个,或doGet()本身并将你的代码放在那里)。

为了区分“完整页面请求”和“AJAX请求”,您需要客户端在该调用中包含一些鉴别器:一些具有不同值的请求参数,一个不同的HTTP方法或其他。完成后,例如,在justAdd()方法中,您可以根据客户端请求检查该鉴别符并调用processRequest()或{{1}}。