【问题标题】:Java HttpServlet not getting GET/POST from backbone.jsJava HttpServlet 没有从backbone.js 获取GET/POST
【发布时间】: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


【解决方案1】:

调用的 URL 应包含上下文路径,即部署应用程序的路径。这通常是包含应用程序的文件夹的名称或 WAR 文件的名称,不带 .war 扩展名。因此,如果您的应用程序位于文件夹 xxx.war 中,请尝试 url: "/xxx/todo"

同时检查 Firebug 以查看被调用的确切 URL 和来自服务器的响应。

【讨论】:

  • 我试过了,它奏效了!非常感谢 Nikos Paraskevopoulos,为我节省了大量时间!
【解决方案2】:

向调用者发回一些东西,以便它得到 200 的响应。

PrintWriter out = response.getWriter();
out.println("Hello World");

【讨论】:

  • 我添加到 TodoServlet 的 doGet 并且仍然得到同样的错误。我做错什么了吗?如何检查 GET 和 POST 发送到哪个 servlet?谢谢!
猜你喜欢
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2017-10-18
相关资源
最近更新 更多