2009-06-26 2 views
0

У меня есть проблема связи между моим сервлетом Java и запросом ajax. об этом подробнее:Сервлеты и связь AJAX

Абсолютный путь к index.html (включая запрос JavaScript/AJAX): http://localhost:9080/chat/index.html

В той же папке сервлета: MyChat.class

И запрос работает как это:

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

var name = document.getElementById ("username"). GetAttribute ("value"); var message = document.getElementById ("message"). GetAttribute ("value");

var tosend = name + "," + message;

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

У меня есть формуляр, в котором пользователь просто вводит имя, а сообщение и «имя пользователя» и «сообщение» - это теги в моем html-файле. Запрос ajax работает, это точно, но он не связывается с сервлетом. У меня также нет идеи, откуда идет вывод System.out.println(). Файл журнала не заполнен ... И сервлет выглядит так:

Публичный класс MyChat расширяет HttpServlet { приватный статический окончательный длинный 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

Попробуйте вызвать сервлет из адресной строки, чтобы узнать, есть ли проблема в JavaScript или сервлете. (Что-то вроде localhost: 9080/chat/index.html? Username = Lenni) –

+0

не будет работать, потому что я получаю имя пользователя из входного тега. выглядит следующим образом: Andre

+0

Ну, тогда просто немного опустите его и верните Hello World и попробуйте это. –

ответ

2

URL-адрес вы указали не на сервлет.

Так же, как URL на страницу индексной http://<server>:<port>/<webapp name>/<resource> URL-адрес для вашего сервлета необходимо отображение в web.xml файл, который соответствует <resource> части URL.

Например, если у вас есть сервлет-контроллер можно было ожидать что-то вроде следующего в вашем 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> 

URL-адреса, которые будут ссылаться на «контроллер» сервлет затем следовать форме http://<server>:<port>/<webapp name>/<anything>.do ,

+0

просто добавил web.xml. он находится внутри папки, где находится html-файл, и моего файла класса. поскольку я запускаю запрос, я получаю статус запроса, который не является 200, поэтому ... запрос не работает – Andre

+1

Файл web.xml должен находиться в каталоге WEB-INF в корневом каталоге веб-приложения. Взгляните на этот учебник для получения подробной информации о упаковке веб-приложения - http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents.html –

+0

и где мне нужно поместить файл класса тогда ? :-( – Andre