Smack在JavaEE中工作得好吗
Smack在JavaEE中是否正常工作??我的存在感有问题。 我通过doPost方法从登录表单中获取凭据。我可以成功地进行身份验证和连接。GetFloster也可以工作。接下来,我想只显示联机的用户,因此当我获得用户状态时,状态对象存储默认值,即使所有用户都可用 整个聊天应用程序在普通java类中运行时没有任何缺陷,没有任何更改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
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.您能建议解决方法吗?可以做什么??