0

我有一个名为 LoggingServlet 的日志记录 servlet,它覆盖了 doGet 和 doPost 方法,如下所示:

public class LoggingServlet extends HttpServlet {
    private static final long serialVersionUID = 2L;

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        ...do stuff here
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        ...do stuff here
    }

我的 web.xml 看起来像这样:

  <servlet>
    <servlet-name>LoggingServlet</servlet-name>
    <servlet-class>com.example.servlets.LoggingServlet</servlet-class>
  </servlet>    

  <servlet-mapping>
    <servlet-name>LoggingServlet</servlet-name>
    <url-pattern>/LoggingServlet/*</url-pattern>
  </servlet-mapping>

这是一个实现一些 JavaScript 的 jsp 片段:

<script>
    document.getElementById("ad_div").onmousedown = function () {
        xmlhttp=new XMLHttpRequest();
        xmlhttp.open("GET","/LoggingServlet?bookie_id=<%= request.getParameter("id") %>&app_id=<%= request.getParameter("app_id") %>",true);
        xmlhttp.send();
        return true;
    };
</script>

我还有另一个通过 Post 请求调用 LoggingServlet 的 jsp。现在我的问题:

  1. Post 请求工作正常,没有任何问题
  2. 但是来自 javascript 的 Get 请求返回 404 错误。我还手动将完整的 url 输入到网络浏览器中,但出现 404 错误。

这怎么可能?

4

1 回答 1

6

servlet 映射到

/LoggingServlet/*

你的网址是

/LoggingServlet?bookie_id...

因此,URL 在要映射到 servlet 的查询字符串之前缺少尾部斜杠。它需要是

/LoggingServlet/?bookie_id...

这也仅在 webapp 是根 webapp 时才有效。如果不是,您还需要预先添加应用程序的上下文路径:

/MyWebApp/LoggingServlet/?bookie_id...
于 2013-06-30T17:09:39.477 回答