Java servlet之间通信时出现空指针异常

Java servlet之间通信时出现空指针异常,java,servlets,Java,Servlets,我在一个servlet中有登录代码:LoginGtalkServlet XMPPConnection connection; //@see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExc

我在一个servlet中有登录代码:LoginGtalkServlet

 XMPPConnection connection;

 //@see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)


 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

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

    System.out.println(userName);
    System.out.println(password);

    //ProxyInfo proxyInfo = new      
    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();
    }
    boolean status=connection.isAuthenticated();
    if(status==true)
    {
        System.out.println("Success");
        response.sendRedirect("GetRoster");
    }
    else
    {
        response.sendRedirect("Loginfailed.html");
    }
我的GetRosterServlet有重新修改名册列表的代码

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
     Roster roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();
    for (RosterEntry r : entries) {
        String user = r.getUser();
        String name = r.getName();
        System.out.println(name + user);
    }
    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) {

        }
    });

}
受保护的void doPost(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException{
花名册=connection.get花名册();
集合条目=花名册.getEntries();
对于(名册r:条目){
字符串user=r.getUser();
String name=r.getName();
System.out.println(名称+用户);
}
花名册.addRosterListener(新花名册Listener(){
//已忽略事件已添加公共无效项(集合
//地址){}
已删除公共无效条目(集合地址){
}
已更新公共无效条目(收集地址){
}
公共无效状态已更改(状态){
System.out.println(“状态更改:+Presence.getFrom()
+“+在场”;
}
@凌驾
已添加公共无效项(集合arg0){
}
});
}
现在问题是我的GetRosterServlet没有被通知我已登录到Gtalk..即LoginGtalkServlet未与GetRosterServlet通信,因此连接。GetRosterServlet()引发空指针异常


如何让花名册servlet知道用户已登录到gtalk,从而获得好友列表请注意,我对XMPP/gtalk并不熟悉

当您在
LoginGtalkServlet
中登录到它时,是否有可能返回某种会话ID?如果是这样,您可以将其作为查询参数放入重定向URL或POST正文中,然后
GetRosterServlet
可以从
request
提取会话ID,并通过该会话ID将其用于Gtalk


注意:我刚才所做的编辑只是为了修复一些错误的语法。没有实质性的更改。)

您可以将连接对象保存在会话属性中

session .setAttribute("connection", connectionObj);

并且可以使用
session.getAttribute(“连接”)

异常堆栈跟踪非常重要,尤其是在NPE中。XMPPConnection可序列化吗。。(您不应该在会话中存储不可序列化的对象。