通过页面更改维护Angular Service

时间:2015-07-20 11:11:12

标签: javascript java angularjs servlets

我正在使用前端的Angular和后端的Java Servlets创建一个Web门户。页面以登录页面开始,它接受输入并将其发送到servlet。服务器使用具有用户名和权限的JSON对象进行验证和响应。我将值设置为一个注入Controller的服务。然后我使用$windows.location将网页更改为主页,即主页。现在我想在主页的控制器中使用此服务。但由于页面更改,我无法维护$scope

所以我想到了使用response.redirect()重定向到后端的主页。但我不知道如何在重定向后在主页中获取用户详细信息。就像我如何将User对象传递给Home.java servlet

这是我的LoginCtrl.js

if (isValid) {
            $http({
                method : 'POST',
                url : 'login',
                data : JSON.stringify($scope.user),
                headers : {
                    'Content-Type' : 'application/json'
                }
            }).success(function(data) {
                if (!("failure" == data)) {
                    console.log(data);
                    var user = {};
                    user.name = data.name;
                    user.permissions = data.permissions;
                    MyService.setUser(user); // set the values for user

                    $window.location.href = 'main.jsp';
                } else {
                    $scope.information = "Invalid username/password!"
                }
            }).error(function(data) {
                console.log(data);
            });

这是我的Login.java servlet

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        Gson gson = new Gson();
        JsonParser parser = new JsonParser();
        JsonObject obj = (JsonObject) parser.parse(request.getReader());

        String username = "";
        String password = "";

        if (obj.get("name") != null & obj.get("password") != null) {
            username = obj.get("name").getAsString();
            password = obj.get("password").getAsString();
        }

        System.out.println("Username :" + username);
        System.out.println("Password :" + password);

        // Passing username and password to Context and validate.
        // If authentication successful, set user object with details and return
        // it
        // User user = (User) Context.Authorized(username,password)

        // for testing
        User user = new User();
        user.setName(username);
        user.setPermission("crwd");
        user.setAuthorized(true);

        response.setContentType("text/html");
        if (user.getAthorized()) {
            String responseJSON = gson.toJson(user);
            response.getWriter().write(responseJSON);
        } else {
            response.getWriter().write("failure");
        }
    }

请告诉我,我的要求是否可以在Angular中实现,或者是否可以使用Java完成,那么如何?

1 个答案:

答案 0 :(得分:0)

如果您重定向到另一个页面,将会有完全不同的Angular应用程序,您将失去服务状态。

  • 您可以制作单页应用程序,并对登录页面和主页导航栏使用$ routeProvider和ng-view。

  • 或者您的应用可以包含不同的页面,但是在每个页面中您都必须调用服务器来获取用户信息