【问题标题】:How to write more then one method inside one servlet如何在一个 servlet 中编写多个方法
【发布时间】:2019-02-08 10:45:53
【问题描述】:

我正在使用 ajax 从我的服务器获取数据作为后端我正在使用 java-servlets

现在我面临的问题是:

  • 我必须通过 ajax 为两个不同的工作调用两个数据
  • 所以我目前正在做的是创建两个 servlet 类并对它们进行两个 ajax 调用
  • 我正在用一个 servlet 的 doGet 方法编写所有代码
  • 并通过 url 中的 ajax 调用,我给出了 servlet 类名

我要做什么

  • 我不能创建一个 servlet,在其中我可以创建多个方法并在该 servlet 类方法上进行 ajax 调用

我在做什么

Servlet1 代码

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

    String categoryCode, categoryName, quantity,sql,str = null;
    Gson gson = new Gson();     
    LinkedHashMap<Object, Object> lhm = null;
    LinkedList<LinkedHashMap<Object, Object>> mainList = new LinkedList<LinkedHashMap<Object, Object>>();
    try {

        sql = "1";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()) {
            lhm = new LinkedHashMap<Object, Object>();
            categoryCode = "A101";
            categoryName = "drinks";
            lhm.put("Category Code", categoryCode);
            lhm.put("Category Name", categoryName);
            mainList.add(lhm);
            str = gson.toJson(mainList);
        }
        response.setContentType("application/json");
        response.getWriter().write(str);

    }}

Servlet2 代码

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

    String itemName, itemCode, quantity,sql,str = null;
    Gson gson = new Gson();     
    LinkedHashMap<Object, Object> lhm = null;
    LinkedList<LinkedHashMap<Object, Object>> mainList = new LinkedList<LinkedHashMap<Object, Object>>();
    try {

        sql = "2";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()) {
            lhm = new LinkedHashMap<Object, Object>();
            itemName = "pepsi";
            itemCode = "AA00";
            lhm.put("Item Code", itemCode);
            lhm.put("Item Name", itemName);
            mainList.add(lhm);
            str = gson.toJson(mainList);
        }
        response.setContentType("application/json");
        response.getWriter().write(str);
    }

还有我的ajax调用代码

    $.ajax({
                         async: true,
                        url : "Servlet1", 
                        method : "GET",
                        dataType : "json",
                        contentType: "application/json; charset=utf-8",  
                        success : function(tableValue) {
                         addTable(tableValue)                               
                        }                                
                    });

现在我必须从我的数据库中获取数据并运行 2 个查询,并且必须对结果做两件不同的事情,但是现在通过创建新的 servlet 来做这件事看起来不太好 我不能在 servlet 中创建一个 doGet 并在这两个方法或任何两个方法中创建一个,以便两个 servlet 代码都可以写在一个servlet 中

注意:-我不了解 spring 框架,所以我只想借助 servlet 来完成

请大家指导一下我该怎么做

提前致谢

【问题讨论】:

  • 也许你可以在你的 ajax 调用中传递一个不同的 url 参数?

标签: java ajax servlets


【解决方案1】:

对于 HttpServlet 类没有一个好的解决方案,因为您只能有一个 doGet 方法。一个不错的解决方法是在您的网址中添加一个参数,例如Servlet1?action=action1,然后在您的doGet() 中实现逻辑 方法来根据该参数决定做什么。例如:

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

  String action = request.getParameter("action");

  switch(action){

  case "action1":
    doAction1(request, response); //Method with the logic of your Servlet1 class
    break;
  case "action2":
    doAction2(request, response);
    break;
  default:
    throw new ServletException("Invalid action parameter");

  }

}

编辑 - 这将是您最后的 ajax 调用:

$.ajax({
                    async: true,
                    url : "Servlet1?action=action1", // Here you set the parameter
                    method : "GET",
                    dataType : "json",
                    contentType: "application/json; charset=utf-8",  
                    success : function(tableValue) {
                     addTable(tableValue)                               
                    }                                
                });

【讨论】:

  • 我不能在 servlet 中编写 userdefine 方法并在我的 ajax url 中传递该方法名称吗?
  • 不,你不能,因为 HttpServlet 只允许一个 doGet() 方法。
  • 所以我必须像我正在做的那样制作新的新课程
  • 不,你可以像我在回答中那样做,你只有一个类可以根据“action”参数选择要做什么。您只需将逻辑放在单独的方法中,以使您的代码更清晰。
  • 在 ajax 调用的 url 中写什么?
猜你喜欢
  • 1970-01-01
  • 2010-10-07
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多