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

时间:2013-01-30 19:55:43

标签: java tomcat servlets angularjs guice

昨天我第一次尝试使用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"}),所以我的问题是1)我是否做正确的事情来从POST请求中获取值({ {1}}?)和2)如果我做的正确,我做错了什么,以便我的浏览器发出的请求不能正确到达我的servlet?

修改

我最终使用Jersey作为我的容器(我认为它被称为)而不是Java的默认Servlets。我看到泽西经常在谷歌上弹出Guice,认为会有足够的文件让他们两个一起工作,我这样做了。有几个例子,我有几个,特别是this one

我遇到的问题是this,但现在一切都很好。

总的来说,如果你喜欢Guice作为你的DI并且想要建立一个Java网站,泽西岛就是好的。它似乎是RESTful服务的一个不同于常规servlet的更专业的功能 - 但这正是我所需要的,无论如何。从Tomcat之外的非科学Google搜索观察来看,Grizzly和Jetty也很受欢迎 - 如果你遇到Tomcat问题,你可能想看看它们。

我希望这个编辑可以节省一些人昨天花的时间和今天的工作时间。

1 个答案:

答案 0 :(得分:0)

实际打印什么?某些Tomcat Map实现不会在其toString()方法中打印其内容。尝试另一种方式来查看其中的内容。你会发现它的全部。

相关问题