【发布时间】:2013-11-01 22:08:39
【问题描述】:
我是backbone.js 和前端开发的新手。如果我的问题很愚蠢,请道歉。我搜索了谷歌和stackoverflow,但没有得到答案。这是我的问题。由于我在前端使用主干,后端使用 java,因此我正在尝试使用主干的 collections.fetch() 和 save() 等来与 Java Servlet 对话。模型就这么简单:
var Todo = Backbone.Model.extend({
defaults: {
title: '',
completed: false
}
});
var TodosCollection = Backbone.Collection.extend({
model: Todo,
url: '/todo'
});
var todos = new TodosCollection();
todos.fetch();
我在 web.xml 中有
<servlet>
<servlet-name>todo</servlet-name>
<servlet-class>test.web.TodoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>todo</servlet-name>
<url-pattern>/todo</url-pattern>
</servlet-mapping>
对于 TodoServlet.java,我只需使用以下代码来检查它是否获得 GET 和 POST:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
logger.debug("In /todo: doGet");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
logger.debug("In /todo: doPost");
}
当我在 Tomcat 上运行它并打开网页时,服务器似乎没有得到 GET。这是正确的方法吗?提前致谢!
【问题讨论】:
-
我建议在浏览器中使用 webdeveloper 工具来查看后台调用。如果您不使用具有此功能的浏览器,也会出现萤火虫。如果服务器没有看到请求,您可能会收到 404。
-
首先,非常感谢您的帮助!所以我在开发者工具中尝试了chrome的网络选项卡(我以前不知道),发现POST状态为“400 Bad request”。我想这与格式有关?
-
这可能是您没有向请求者返回任何数据。您至少应该使用相应的返回一些东西。您可以简单地发送错误代码。除非您将记录器配置为显示所有消息,否则您可能也看不到调试消息。尝试使用 system.out.println 或使用类似 logger.info 的东西来代替调试。看起来您的回复已经到了,但您没有向呼叫者回复任何内容。
-
谢谢。我认为您是对的,因为我注意到内容的大小为 139B 和 0B(chrome 的开发人员工具显示的两行)。但我实际上是在使用“this.collection.create(formData);”并且 formData 显示在网页上,所以我认为它不应该为空。您认为问题是什么?
-
我认为您获得 400 是因为您没有响应客户。你应该在下面看到我的回答。如果您这样做,它将以 200 响应和文本 hello world 响应客户端。响应为 0 字节,这是错误的。试试下面的解决方案,然后告诉我。
标签: java javascript tomcat servlets backbone.js