0

TestAjax.java 内(場所:webapps/servlets/,コンパイル済み):

public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
{ 
        String data = "Hello World";
        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(data);
}

HTML(JavaScript)の場合:</p>

function showHelloWorld(inputForm) {
                var xhr = new XMLHttpRequest();
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState == 4) {
                            var data = xhr.responseText;
                            alert(data);
                        }
                    }
                 xhr.open('GET', '../../examples/servlets/TestAjax.class', true);
                 xhr.send(null);
}

web.xml で:

<servlet> 
<servlet-name>TestAjax</servlet-name> 
<display-name>TestAjax</display-name> 
<servlet-class>TestAjax</servlet-class> 
</servlet>  
<servlet-mapping> 
<servlet-name>TestAjax</servlet-name> 
<url-pattern>/servlet/TestAjax</url-pattern> 
</servlet-mapping>

症状:

showHelloWorld() が実行されると、アラート ボックスに次のように表示されます。

����2、

!()VCodeLineNumberTabledoGetR(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V Exceptions"# SourceFile TestAjax.java* Hello World * text/plain$%&UTF-8'&()*+&TestAjaxjavax/ servlet/http/HttpServletjava/io/IOExceptionjavax/servlet/ServletException&javax/servlet/http/HttpServletResponsesetContentType(Ljava/lang/String;)VsetCharacterEncoding getWriter()Ljava/io/PrintWriter;java/io/PrintWriterwrite!

*�� FN,�,�,�-��?@ABC


その中に「Hello World」が含まれていることに注意してください。ただし、正しい応答には「Hello World」のみが含まれている必要があります。応答にこれらすべてのがらくたがあるべきではありません。

コードと展開を何百万回もチェックしましたが、まだ手がかりが見つかりません。

この問題に光を当ててください。どうもありがとうございます!

4

1 に答える 1

0

コンパイルされた Java クラスのクライアント側をロードしようとしていますが、通常、奇妙な文字が表示されます。おそらく必要なのは、サーブレット パスを呼び出すことです。

xhr.open('GET', '<%=request.getContextPath()%>/servlet/TestAjax', true);

を思い出してください<url-pattern>/servlet/TestAjax</url-pattern>。これはサーブレット クラスへの外部マッピングです。アプリケーション コンテナは、このパスを介してリクエストを転送します。

于 2012-11-20T09:30:39.440 に答える