昨天我第一次尝试使用 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"}
(getParameterMap()
我做对了,我做错了什么,以至于我的浏览器发出的请求没有正确地到达我的 servlet?
编辑:
我最终使用 Jersey 作为我的容器(我认为它被称为)而不是 Java 的默认 Servlet。在看到 Jersey 经常在 Google 上出现 Guice 后,我这样做了,我认为会有足够的文档让他们两个一起工作。有几个例子,我有点借鉴了几个,尤其是这个。
我在让它工作时遇到的障碍是这样的,但现在一切都很好。
总的来说,如果你喜欢 Guice 作为你的 DI 并且想要创建一个 Java 网站,Jersey 是不错的选择。它似乎是针对 RESTful 服务的一种不同于常规 servlet 的更专业的功能——但无论如何,这正是我所需要的。根据我在 Tomcat 之外的非科学谷歌搜索观察结果,Grizzly 和 Jetty 也很受欢迎——如果您在使用 Tomcat 时遇到问题,您可能需要查看它们。
我希望这个编辑可以节省我昨天和今天让它工作的时间。