2009-06-26 7 views
0

J'ai un problème de communication entre ma servlet java et une requête ajax. plus à ce sujet:Servlets et communication AJAX

chemin absolu du index.html (y compris javascript/ajax demande): http://localhost:9080/chat/index.html

Dans le même dossier servlet: MyChat.class

Et la demande travaille comme ceci:

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

var nom = document.getElementById ("nom d'utilisateur"). GetAttribute ("valeur"); var message = document.getElementById ("message"). GetAttribute ("valeur");

var tosend = nom + "," + message;

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

J'ai un formulaire où un utilisateur tape simplement le nom et le message et "nom d'utilisateur" et "message" sont des balises dans mon fichier html. La requête ajax fonctionne, c'est sûr, mais elle ne communique pas avec le servlet. Je n'ai pas non plus une idée de la sortie de System.out.println(). Aucun fichier journal n'est rempli ... Et la servlet ressemble à ceci:

Classe publique MyChat extends HttpServlet { private static final long 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

Essayez d'appeler le servlet depuis la barre d'adresse pour savoir si le problème est dans le JavaScript ou le servlet. (Quelque chose comme localhost: 9080/chat/index.html? Nom d'utilisateur = Lenni) –

+0

ne fonctionnera pas parce que je reçois le nom d'utilisateur à partir d'un tag d'entrée. ressemble à: Andre

+0

Eh bien, alors il suffit de l'abaisser un peu et de retourner un Hello World et essayer cela. –

Répondre

2

L'URL que vous avez spécifié n'est pas à votre servlet.

Tout comme l'URL de la page d'index est http://<server>:<port>/<webapp name>/<resource> l'URL de votre servlet nécessite un mappage dans le fichier web.xml qui correspond à la partie <resource> de l'URL.

Par exemple, si vous aviez un servlet contrôleur que vous attendez quelque chose comme ce qui suit dans votre web.xml:

<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> 

Les URL qui invoquent le servlet « contrôleur » serait alors suivre la forme http://<server>:<port>/<webapp name>/<anything>.do .

+0

vient d'ajouter le fichier web.xml. c'est dans le dossier où le fichier html est et mon fichier de classe. Lorsque je lance la requête, j'obtiens un statut de requête qui n'est pas 200 alors ... la requête échoue – Andre

+1

Le fichier web.xml doit se trouver dans un répertoire WEB-INF à la racine de l'application web. Jetez un oeil à ce tutoriel pour les détails sur l'emballage d'une application web - http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents.html –

+0

et où dois-je placer le fichier de classe, puis ? :-( – Andre