1

昨日、Tomcat とサーブレットを初めて使用してみました (IIS/C#/MVC 出身です)。

AngularJS と Guice も使用しています。

単一のメソッドを持つサーブレットを作成しました。

@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 のコンソールの [ネットワーク] タブを見て、パラメータが送信されていることを確認すると{"gameId":1,"command":"a"}(getParameterMap()私は正しいことをしているのですが、ブラウザが行ったリクエストがサーブレットに正しく到達していないために、何が間違っているのでしょうか?

編集:

Javaのデフォルトのサーブレットの代わりにJerseyをコンテナとして使用することになりました(私はそれが呼ばれていると思います)。これを行ったのは、Jersey が Guice を使用して Google で頻繁に表示されるのを見て、この 2 つを連携させるのに十分なドキュメントがあると考えたからです。いくつかの例があり、私はいくつか、特にこれを描きました。

私がそれを機能させるために遭遇した障害はこれでしたが、今ではすべて順調です。

全体として、DI に Guice が好きで、Java Web サイトを作成したい場合は、Jersey が適していると言えます。通常のサーブレットとは異なる、RESTful サービスのより専門的な機能のためのようですが、とにかくそれが必要でした。Tomcat に加えて、Grizzly と Jetty も人気があります。Tomcat に問題がある場合は、それらを調べることをお勧めします。

この編集によって、私が昨日と今日、作業に費やした時間を誰かが節約できることを願っています。

4

1 に答える 1

0

それは実際に何を印刷しますか?一部の Tomcat Map 実装は、そのコンテンツを toString() メソッドで出力しません。その内容を別の方法で確認してみてください。すべてがそこにあります。

于 2013-01-31T00:00:13.487 に答える