[英]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.