【问题标题】:Servlet mapping for ajax call parametersajax 调用参数的 Servlet 映射
【发布时间】:2011-07-05 10:26:03
【问题描述】:

我的 ajax 调用具有 url http://localhost:80/Push/GetContacts?id=23 和以下 servlet 映射:

<servlet-mapping>
      <servlet-name>Test</servlet-name>
      <url-pattern>/GetContacts*</url-pattern>
</servlet-mapping>

在 ajax 调用上不会调用 servlet。它返回 HTTP 404 not found 响应。我的 ajax 调用的正确 URL 模式是什么?

这里是由于 servlet 而无法正常工作的 ajax 调用。

jQuery.getJSON('http://localhost:8080/Push/GetContacts&callback=?', function(data) {
     alert(data.data);
});

小服务程序:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException{
        try{
            resp.setContentType("text/html");
            PrintWriter out = resp.getWriter();
            out.write("{data: helloworld}");
            out.close();

        }
        catch(Exception e){
            e.printStackTrace();
        }

【问题讨论】:

    标签: java ajax servlets jsonp


    【解决方案1】:

    网址格式必须是/GetContacts,不带星号。这些参数不是 servlet 映射的一部分,在找到正确的 servlet 时会被忽略。如果您想支持像 /GetContacts/23 这样的 URL,您可以使用 /GetContacts/* 的 servlet 映射并使用 request.getPathInfo 检索 id。

    编辑: 正如 BalusC 刚刚注意到的,您的 ajax 调用中的 url 不正确。参数回调应该用问号分隔,而不是和号:GetContacts?callback=...

    另外,{data: helloworld} 根据json spec 是无效的,data 和 helloworld 都应该用引号引起来。但这也与 404 问题无关。

    【讨论】:

    • 我已经测试过了。我用 url 打开浏览器:localhost:80/Push/GetContacts?id=23 并出现 404 错误。但不是localhost:80/Push/GetContacts
    • 我正在尝试进行 jsonp 调用,所以有回调参数
    • 你有这个servlet的源代码吗?也许 servlet 实际被调用但随后返回 404 本身,因为它没有找到传递的 id。在这种情况下,调试 servlet 或添加一些打印语句可能会有所帮助。
    • 您在更改web.xml 后是否重建/重新部署/重新启动?
    • 您的 ajax URL 错误(servlet 中的内容类型也错误,但不应生成 404)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多