昨天我第一次尝试使用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问题,你可能想看看它们。
我希望这个编辑可以节省一些人昨天花的时间和今天的工作时间。
答案 0 :(得分:0)
实际打印什么?某些Tomcat Map实现不会在其toString()方法中打印其内容。尝试另一种方式来查看其中的内容。你会发现它的全部。