Java Servlet POST操作未从请求接收参数

Java Servlet POST操作未从请求接收参数,java,tomcat,servlets,angularjs,guice,Java,Tomcat,Servlets,Angularjs,Guice,昨天我第一次尝试使用Tomcat和servlet,这是我来自IIS/C/MVC 我也在使用AngularJS和Guice 我制作了一个Servlet,它只有一个方法: @Singleton @SuppressWarnings("serial") public class CommandServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletR

昨天我第一次尝试使用Tomcat和servlet,这是我来自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服务器上的控制台正在打印一个空映射{},而没有在POST请求中传递参数。当我查看Chrome控制台中的network选项卡时,看到参数正在被发送{gameId:1,command:a},所以我的问题是1我从POST请求getParameterMap中获取值的做法是否正确?如果我做了正确的事情,那么我做错了什么,以至于我的浏览器发出的请求没有正确地到达我的servlet

编辑:

我最终使用Jersey作为容器,我认为它被调用,而不是Java的默认servlet。我是在谷歌上看到Jersey和Guice经常出现在一起之后做这件事的,我认为有足够的文档让他们两人一起工作。这里有几个例子,我有点借鉴了几个,尤其是

我在工作中遇到的障碍是,但现在一切都很好

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


我希望这篇编辑可以节省我昨天和今天花在工作上的时间。

它实际上打印了什么?一些Tomcat映射实现不会在toString方法中打印其内容。试着用另一种方式看看里面有什么。您将在这里找到所有内容。

谢谢您的回复。在行中使用断点调试它时,会显示相同的内容空映射。实际上,我现在正在研究Jersey和resources,而不是Servlet,因为我正在创建一个只需要传递和接收JSON的客户端应用程序。但是服务器实际上只是打印了{}而没有引号,来回答您的问题。@WordsLikeJared您的JQuery代码在我看来还行,与我的工作原理基本相同。你试过在地图上迭代吗?调用'command'和'gameId'的req.getParameter?@EJP他使用的是angular.js而不是jquery.js,他将JSON传递给Tomcat。它应该是URL编码的形式。