Как правильно взаимодействовать с сервлетами из Angular

#java #angularjs #servlets

#java #angularjs #сервлеты

Вопрос:

Я пытаюсь извлечь данные из сервлета и вызвать такой сервлет из контроллера angular. Однако контроллер, похоже, не достигает сервлета.

Я установил пару сообщений об ошибках (вместо отладки) и вижу, что функция выполнена, но сервлет не достигнут (всегда появляется сообщение «не удалось найти»).

Возможно ли, что используемый им путь неверен? Я тестировал с / в начале, а также используя полный путь (localhost /project / servlet).

Угловой контроллер

 
app.controller("userController", function($scope, $http){

    $scope.error = "NOT EXECUTED";
    var onSuccess = function(response){
        $scope.users = response.data;
        $scope.error = "EXECUTED BUT NOT PROPERLY";
    };
    var onError = function(response){
        $scope.error = "unable to find the record";
    }
    var con = $http.get("UserListServlet");
    con.then(onSuccess, onError);

})
 

Сервлет

 package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;

import com.google.gson.Gson;

import elementos.Usuario;


@WebServlet(value="/UserListServlet")
public class UserListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    public UserListServlet() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        Database db = Database.getInstance();
        ArrayList<Usuario> usersList = db.getUsuarios();

        JSONArray arrayObj = new JSONArray(usersList);
        String jObj = new Gson().toJson(arrayObj);

        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(jObj);


    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
 

Моя цель — получить данные из сервлета, чтобы я мог легко отобразить их на своей домашней странице.

Обновить:

Из браузера я могу получить доступ к другим сервлетам (Login, process) через имя «mapping» (@WebServlet (значение =»/ login»), но не к этому. Я также создал это с другим именем и не работает. Я не могу найти различий между теми, которые работают, и теми, которые этого не делают.

Комментарии:

1. Проблема возникает только при переходе по URL-адресу из вашего js, или вы даже не можете получить его через обычный браузер?

2. вы имеете в виду, если я перейду через brouser к localhost / project / servlet? он не находит сервлет. Я попробовал с другим сервлетом, который я использую с помощью POST с кнопки отправки формы, и ошибка отличается (GET не поддерживается), что имеет смысл (этот сервлет отлично работает в приложении)

Ответ №1:

Нашел проблему (на самом деле это приснилось).

Сервлеты, которые «работают», были созданы под управлением tomcat 8.0 на моем школьном компьютере. Дома я использовал tomcat 8.5, но поскольку я не удалял зависимость от tomcat 8.0, он вообще не строился (eclipse не показал мне ошибки idk почему). Таким образом, технически сервлеты никогда не создавались.