Как написать более одного метода в одном сервлете - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над ajax для получения данных с моего сервера в качестве бэк-энда. Я использую java-сервлеты

Теперь с какими проблемами я сталкиваюсь:

  • Мне нужновызов двух данных для двух разных работ через ajax
  • Так что я сейчас занимаюсь созданием двух классов сервлетов и выполнением двух вызовов ajax для них обоих
  • я пишу все свои коды в doGet метод одного сервлета
  • и через вызов ajax в url я даю имя класса сервлета

Что я пытаюсь сделать

  • я не могу создать один сервлет, и внутри него я могу создать несколько методов и сделать вызов 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 запроса и сделать две разные вещи с результатом, но делать это с созданием новых-новых сервлетов теперь не выглядит обманчивоd Я не могу создать один doGet и внутри этих двух методов или любых двух методов внутри сервлета, чтобы оба кода сервлета могли быть записаны в одном сервлете

Примечание: - У меня нетзнание весенних рамок, поэтому я хочу сделать это только с помощью сервлетов

кто-нибудь, пожалуйста, подскажите мне, как я могу это сделать

Заранее спасибо

1 Ответ

0 голосов
/ 08 февраля 2019

Не существует хорошего решения для классов HttpServlet, так как у вас может быть только один doGet метод.Достойным обходным решением будет добавление параметра в ваш URL, например, 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)                               
                    }                                
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...