0

我的 Java servlet 和 Ajax 请求之间确实存在通信问题。更多关于它:

index.html 的绝对路径(包括 JavaScript/Ajax 请求):http://localhost:9080/chat/index.html

在同一文件夹中的 servlet: 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 = interpretRequest;

我有一个公式,用户只需输入名称和消息,username并且message<input>我的 HTML 文件中的标签。Ajax 请求有效,这是肯定的,但它不与 servlet 通信。我也不知道输出的System.out.println()去向。没有日志文件被填充... servlet 看起来像这样:

public class 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);
    }
}
4

1 回答 1

2

您指定的 URL 不是您的 servlet。

就像索引页面http://<server>:<port>/<webapp name>/<resource>的 URL 是 servlet 的 URL 一样,需要在web.xml文件中映射对应于<resource>url 的部分。

例如,如果您有一个控制器 servlet,您会期望在 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>

然后,将调用“控制器”servlet 的 URL 将遵循表单http://<server>:<port>/<webapp name>/<anything>.do

于 2009-06-26T07:46:47.337 回答