2009-06-26 8 views
0

Ich habe hier ein Kommunikationsproblem zwischen meinem Java-Servlet und einer Ajax-Anfrage. weitere Informationen:Servlets und AJAX-Kommunikation

Absoluter Pfad zum index.html (einschließlich Javascript/Ajax-Request): http://localhost:9080/chat/index.html

im selben Ordner die Servlet: MyChat.class

und die Anforderung funktioniert wie dies:

var url = "http://localhost:9080/chat";

var name = document.getElementById ("Benutzername"). GetAttribute ("Wert"); var message = document.getElementById ("Nachricht"). GetAttribute ("Wert");

var tosend = Name + "," + Nachricht;

request.open ('GET', url, true); Anfrage.send (Tosend); request.onreadystatechange = interpretRequest;

Ich habe ein Formular, wo ein Benutzer nur den Namen und die Nachricht eingibt und "Benutzername" und "Nachricht" sind Tags in meiner HTML-Datei. Die Ajax-Anfrage funktioniert, das ist sicher, aber sie kommuniziert nicht mit dem Servlet. Ich habe auch keine Idee, wo die Ausgabe von System.out.println() geht. Keine Protokolldatei ist gefüllt ... Und das Servlet sieht so aus:

öffentliche Klasse MyChat erweitert HttpServlet { private statische endgültige lange serialVersionUID = 1L;

private ArrayList<String> myMessages = new ArrayList<String>(); 

public void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException 
{ 
    BufferedReader r = request.getReader(); 

    while(r.readLine() != null) 
    { 
        // split the words at the ',' 
     String[] tmp = r.readLine().split(".\\s"); 
     myMessages.add(tmp[0]+" "+tmp[1]); 
    } 

    //response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

      Iterator<String> it = myMessages.iterator(); 
    while(it.hasNext()) 
    { 
     out.println(it.next()); 
        System.out.println(it.next()); 
    } 
} 

public void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException 
{ 
    doGet(request, response); 
} 

}

+0

Versuchen Sie, das Servlet über die Adressleiste aufzurufen, um herauszufinden, ob das Problem im JavaScript oder Servlet liegt. (Etwas wie localhost: 9080/chat/index.html? Benutzername = Lenni) –

+0

wird nicht funktionieren, weil ich den Benutzernamen von einem Eingabe-Tag bekomme. sieht so aus: Andre

+0

Nun, dann dumpfer es ein wenig und gib eine Hello World zurück und probiere das aus. –

Antwort

2

Die URL, die Sie angegeben haben, ist nicht zu Ihrem Servlet.

Genau wie die URL zur Indexseite ist http://<server>:<port>/<webapp name>/<resource> die URL zu Ihrem Servlet benötigt eine Zuordnung in der web.xml Datei, die dem <resource> Teil der URL entspricht.

Zum Beispiel, wenn Sie einen Controller-Servlet hatte würden Sie so etwas wie die folgenden in Ihrem web.xml erwarten:

<servlet> 
    <servlet-name>controller</servlet-name> 
    <servlet-class>ControllerServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>controller</servlet-name> 
    <url-pattern>/*.do</url-pattern> 
</servlet-mapping> 

Die URLs, die die ‚Controller‘ Servlet aufrufen würde würde dann das Formular folgen http://<server>:<port>/<webapp name>/<anything>.do .

+0

hat gerade die web.xml hinzugefügt. Es befindet sich in dem Ordner, in dem sich die HTML-Datei befindet, und in meiner Klassendatei. Wenn ich die Anfrage starte, erhalte ich einen Anfrage-Status, der nicht 200 ist, also ... Anfrage fehlschlägt – Andre

+1

Die Datei web.xml muss sich in einem WEB-INF-Verzeichnis im Stammverzeichnis der Web-App befinden. Werfen Sie einen Blick auf dieses Tutorial für Details zum Packen einer Web-App - http://java.sun.com/j2ee/tutorial/3_fcs/doc/WebComponents.html –

+0

und wo muss ich dann die Klassendatei platzieren ? :-( – Andre