Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smack在JavaEE中工作得好吗_Java_Jakarta Ee_Smack_Google Talk - Fatal编程技术网

Smack在JavaEE中工作得好吗

Smack在JavaEE中工作得好吗,java,jakarta-ee,smack,google-talk,Java,Jakarta Ee,Smack,Google Talk,Smack在JavaEE中是否正常工作??我的存在感有问题。 我通过doPost方法从登录表单中获取凭据。我可以成功地进行身份验证和连接。GetFloster也可以工作。接下来,我想只显示联机的用户,因此当我获得用户状态时,状态对象存储默认值,即使所有用户都可用 整个聊天应用程序在普通java类中运行时没有任何缺陷,没有任何更改 String userName = request.getParameter("username"); String password

Smack在JavaEE中是否正常工作??我的存在感有问题。 我通过doPost方法从登录表单中获取凭据。我可以成功地进行身份验证和连接。GetFloster也可以工作。接下来,我想只显示联机的用户,因此当我获得用户状态时,状态对象存储默认值,即使所有用户都可用

整个聊天应用程序在普通java类中运行时没有任何缺陷,没有任何更改

            String userName = request.getParameter("username");
    String password = request.getParameter("password");

        HttpSession session=request.getSession();
        session.setAttribute("username", userName);

    SmackAPIGtalkServlet gtalk = new SmackAPIGtalkServlet();

    ConnectionConfiguration config = new ConnectionConfiguration(
            "talk.google.com", 5222, "gmail.com");
    connection = new XMPPConnection(config);
    config.setSASLAuthenticationEnabled(false);
    try {
        connection.connect();
    } catch (XMPPException e) {
        e.printStackTrace();
    }
    try {
        connection.login(userName, password);
    } catch (XMPPException e) {
        e.printStackTrace();
    }
    System.out.println(connection.isAuthenticated());
    boolean status = connection.isAuthenticated();
    if (status == true) {
        gtalk.displayOnlineBuddyList();
        response.sendRedirect("Roster.jsp");

    }
    else
    {
        response.sendRedirect("Failed.jsp");
    }
}

public void displayOnlineBuddyList() {
    Roster roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();
    int count1 = 0;
    int count2 = 0;
    for (RosterEntry r : entries) {
        Presence presence = roster.getPresence(r.getUser());
        if (presence.getType() == Presence.Type.unavailable) {
            // System.out.println(user + "is offline");
            count1++;
        } else {
            System.out.println(name+user + "is online");
            count2++;
        }
    }
    roster.addRosterListener(new RosterListener() {
        // Ignored events public void entriesAdded(Collection<String>
        // addresses) {}
        public void entriesDeleted(Collection<String> addresses) {
        }

        public void entriesUpdated(Collection<String> addresses) {
        }

        public void presenceChanged(Presence presence) {
            System.out.println("Presence changed: " + presence.getFrom()
                    + " " + presence);
        }

        @Override
        public void entriesAdded(Collection<String> arg0) {
            // TODO Auto-generated method stub

        }
    });
}
我被这个问题困扰着,无法让代码与servlet一起工作。有人能帮我吗???

你必须实现RosterListener接口,在该接口中,你必须覆盖presenceChanged方法,这样你才能获得用户的存在

它对我有用

当您获得GTalk的名册时,所有名册都将处于不可用状态

但是过了一段时间,他们的状态发生了变化,并且可以从RosterListener中的presenceChanged方法获取状态,但是为此,您必须实现RosterListener的presenceChanged方法


是的,它在JavaEE、Android和WAP中都能很好地工作。

将在JavaEE内部工作,是和否。 Smack将在web容器内工作,但由于它创建自己的线程,所以它不会在EJB容器内工作。因此,它将根据您运行它的位置而工作

要了解您的一些问题,您必须了解servlet中对象的生命周期与每个请求的请求/响应周期有关。这与标准java应用程序不同,在标准java应用程序中,对象通常会随着您的需要而存在,因为您可以控制它们的生命周期

例如,在您显示的代码中,您为我假设的每个请求创建连接,因为没有显示所有代码。因此,针对该连接注册侦听器将是毫无意义的,因为一旦您离开该方法,它将超出范围,并最终被垃圾回收。您必须维护servlet请求范围之外的连接才能使其工作,否则您将打开和关闭每个请求的连接


XMPP本质上是完全异步的,而servlet请求是同步的。您必须付出一些努力使它们协同工作,因此不要期望在独立应用程序中工作的代码只在这种环境中工作。

Smack在Java EE中正常工作吗??我的存在感有问题。我通过doPost方法从登录表单中获取凭据。我可以成功地进行身份验证和连接。GetFloster也可以工作。接下来,我想只显示联机的用户,因此当我获得用户状态时,状态对象存储默认值,即使所有用户都可用!!这是我的密码

<%
 Roster rst = roster;
 rst.addRosterListener(new RosterListener() {
public void entriesAdded(final Collection args) {}

public void entriesDeleted(final Collection<String> addresses) {}

public void entriesUpdated(final Collection<String> addresses) {}

public void presenceChanged(final Presence presence) {
    final Presence prsence1 = presence;
    prsenceChanged(prsence1);
    if (prsence1.isAvailable()) {
        System.out.println("Is Available: " + presence.isAvailable());
    } 


}
});

 %> 



<%!void prsenceChanged(Presence presence){ if(null != presence){%>
<script language="javascript"> 
    alert("hai");   

</script>

是的,smack在j2ee上运行良好,至少对我来说是这样。它与java无关-ee@Jigar乔希:我已经编辑了我的问题。你可以看看it@newbie:你能在presence Changed中看到任何状态变化吗。。。。。方法它是否打印在您登录后更改的状态信息?不,我不能…更改的状态信息不起作用…我使用toXML检查了它为所有用户分配的不可用状态信息,无论状态或状态如何更改。总体上,状态信息不起作用all@newbie:最初,您将无法访问所有用户,因此只需查看我的上述答案发布后,您的代码将起作用。@Ankit-我在上面的代码中使用RosterListener…整个状态似乎不起作用…@Robin.您能建议解决方法吗?可以做什么??