[英]POST parameters in Vue request to Java Servlet not getting through to Servlet?
[英]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.