【问题标题】:Servlets and AJAX communicationServlet 和 AJAX 通信
【发布时间】:2010-11-06 01:49:33
【问题描述】:

我的 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;

我有一个公式,用户只需输入名称和消息,usernamemessage 在我的 HTML 文件中是 <input> 标记。 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);
    }
}

【问题讨论】:

  • 尝试从地址栏调用 servlet 以确定问题出在 JavaScript 还是 servlet。 (类似于 localhost:9080/chat/index.html?username=Lenni)
  • 不起作用,因为我从输入标签中获取用户名。看起来像:
  • 好吧,那就简单一点,然后返回一个 Hello World 并尝试一下。

标签: java javascript ajax servlets communication


【解决方案1】:

您指定的 URL 不是您的 servlet。

就像索引页面的 URL 是 http://&lt;server&gt;:&lt;port&gt;/&lt;webapp name&gt;/&lt;resource&gt; 一样,您的 servlet 的 URL 需要在 web.xml 文件中与 URL 的 &lt;resource&gt; 部分相对应的映射。

例如,如果您有一个控制器 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://&lt;server&gt;:&lt;port&gt;/&lt;webapp name&gt;/&lt;anything&gt;.do 的形式。

【讨论】:

  • 刚刚添加了 web.xml。它在 html 文件所在的文件夹和我的类文件中。当我开始请求时,我得到的请求状态不是 200 所以......请求失败
  • web.xml 文件需要位于 Web 应用程序根目录的 WEB-INF 目录中。查看本教程以了解有关打包 Web 应用程序的详细信息 - java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents.html
  • 那么我必须在哪里放置类文件? :-(
  • 类进入WEB-INF/classes。如果您使用 ANT,WAR 任务将为您完成所有工作。
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 2012-08-03
  • 2011-01-25
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
相关资源
最近更新 更多