0

LoggingServlet というロギング サーブレットがあり、次のように 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 エラーを返します。また、Web ブラウザに完全な URL を手動で入力したところ、404 エラーが発生しました。

そんなことがあるものか?

4

1 に答える 1

6

サーブレットはにマップされます

/LoggingServlet/*

あなたのURLは

/LoggingServlet?bookie_id...

したがって、URL には、サーブレットにマップされるクエリ文字列の前に末尾のスラッシュがありません。それはする必要があります

/LoggingServlet/?bookie_id...

これは、webapp がルート webapp である場合にのみ機能します。そうでない場合は、アプリケーションのコンテキスト パスも追加する必要があります。

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