簡體   English   中英

Java Servlet POST操作未從請求接收參數

[英]Java Servlet POST action not receiving parameters from request

昨天,我第一次嘗試使用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服務器上的控制台正在打印一個空的Map( {} ),而沒有隨POST請求一起傳遞參數。 當我在Chrome瀏覽器的控制台中查看“網絡”標簽時,發現正在發送參數( {"gameId":1,"command":"a"} ),所以我的問題是1)我在做正確的事情{"gameId":1,"command":"a"}從POST請求中獲取值( getParameterMap()和2),如果我做對了,那我在做什么錯,以致瀏覽器發出的請求無法正確到達我的servlet?

編輯:

我最終使用Jersey作為我的容器(我認為它被稱為),而不是Java的默認Servlet。 在看到Jersey經常在Google上彈出Guice之后,我這樣做了,以為會有足夠的文檔來使他們兩個一起工作。 有幾個例子,我有點借鑒了幾個,尤其是這個例子。

我跑進它讓工作最大的困難是這個 ,但現在一切都很好走。

總體而言,我想說的是,如果您喜歡Guice作為DI並想要建立一個Java網站,Jersey很好。 與常規的servlet相比,它似乎是針對RESTful服務的一種不同的更專業的功能-但這正是我所需要的。 從我不科學的Google谷歌搜索結果中,除了Tomcat之外,還有Grizzly和Jetty也很流行-如果您在使用Tomcat時遇到問題,可能需要研究一下。

我希望此編輯可以節省我昨天和今天花費的時間。

實際打印什么? 某些Tomcat Map實現未在其toString()方法中打印其內容。 嘗試另一種查看其中內容的方法。 您將在這里找到所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM