1

昨天我第一次尝试使用 Tomcat 和 Servlets(我来自 IIS/C#/MVC)。

我也在使用 AngularJS 和 Guice。

我制作了一个只有一个方法的 Servlet:

@Singleton
@SuppressWarnings("serial")
public class CommandServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println(req.getParameterMap());
    }

}

我在 Angular 中创建了一个如下所示的服务:

app.factory('console', [ '$http', function($http) {
    var console = {};

    console.execute = function(gameId, command) {
        $http.post("Command/", {
            gameId : gameId,
            command : command
        }).success(function(data, status, headers, config) {

        }).error(function(data, status, headers, config) {

        });
    };

    return console;
} ]);

在我的控制器中,我注入服务并通过范围上的“执行”函数将其公开给视图:

app.controller('PlayController', function($scope, console) {
    $scope.consoleIn = "";

    $scope.gameId = 1;

    $scope.execute = function(command) {
        $scope.consoleOut = console.execute($scope.gameId, command);
    };
});

在我看来,我有一个按钮,它调用该函数并从输入元素传入文本:

<input ng-model="consoleIn" type="text">
<button class="btn" type="button" ng-click="execute(consoleIn)">Go!</button>

出于某种原因,我的 Tomcat 服务器上的控制台正在打印一个空 Map ( {}),而没有通过 POST 请求传递参数。当我查看 Chrome 控制台中的网络选项卡并看到正在发送参数时{"gameId":1,"command":"a"}getParameterMap()我做对了,我做错了什么,以至于我的浏览器发出的请求没有正确地到达我的 servlet?

编辑:

我最终使用 Jersey 作为我的容器(我认为它被称为)而不是 Java 的默认 Servlet。在看到 Jersey 经常在 Google 上出现 Guice 后,我这样做了,我认为会有足够的文档让他们两个一起工作。有几个例子,我有点借鉴了几个,尤其是这个

我在让它工作时遇到的障碍是这样的,但现在一切都很好。

总的来说,如果你喜欢 Guice 作为你的 DI 并且想要创建一个 Java 网站,Jersey 是不错的选择。它似乎是针对 RESTful 服务的一种不同于常规 servlet 的更专业的功能——但无论如何,这正是我所需要的。根据我在 Tomcat 之外的非科学谷歌搜索观察结果,Grizzly 和 Jetty 也很受欢迎——如果您在使用 Tomcat 时遇到问题,您可能需要查看它们。

我希望这个编辑可以节省我昨天和今天让它工作的时间。

4

1 回答 1

0

实际上打印了什么?一些 Tomcat Map 实现不在其 toString() 方法中打印它们的内容。尝试另一种方式来查看其中的内容。你会在那里找到它的一切。

于 2013-01-31T00:00:13.487 回答