ITPUB??ì3
ITPUB论坛 » WEB 2.0技术 » AJAX的一个实时刷新的问题 JSP版 ^O^


标题: AJAX的一个实时刷新的问题 JSP版 ^O^
离线 yangm1203
初级会员



精华贴数 0
个人空间 0
技术积分 106 (15617)
社区积分 0 (947761)
注册日期 2006-5-22
论坛徽章:0
      
      

发表于 2007-5-14 23:52 
AJAX的一个实时刷新的问题 JSP版 ^O^

我想用XMlHttpRequest加上JSP的监听器作一个在线客户的无提交刷新  但是却一直搞不好  希望各位大侠能帮帮忙   还有就是show.jsp只显示2次  头一次显示正常 后面一次就只显示源代码了

监听器代码
package test;

import java.io.*;
import java.util.*;
import javax.servlet.http.*;

public class SessionListener implements HttpSessionListener,HttpSessionAttributeListener {

        private static List list = new ArrayList();

        public static int count = 0;

        // HttpSessionListener
        public void sessionCreated(HttpSessionEvent arg0) {
                count++;
                logout("创建:" + new Date().toString());
        }

        public void sessionDestroyed(HttpSessionEvent arg0) {
                count--;
                logout("销毁:" + new Date().toString());
        }

        public static int getCount() {
                return count;
        }

        public void logout(String msg) {
                PrintWriter out = null;
                try {
                        out = new PrintWriter(new FileOutputStream("C:\\logout.txt", true));
                        out.println(msg);
                        out.close();
                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                }
        }

        // HttpSessionAttributeListener
        public void attributeAdded(HttpSessionBindingEvent arg0) {
                if ("name".equals(arg0.getName())) {
                        list.add(arg0.getValue());
                }
        }

        public void attributeRemoved(HttpSessionBindingEvent arg0) {
                if ("name".equals(arg0.getName())) {
                        list.remove(arg0.getValue());
                }
        }

        public void attributeReplaced(HttpSessionBindingEvent arg0) {
        }

        public static List getList() {
                return list;
        }
}



TestSessionAttributeListener.jsp

<body>
                <%
                        String name = new String(request.getParameter("name".getBytes(
                                        "ISO-8859-1", "GBK";
                        session.setAttribute("name", name);
                        out.print(name);
                %>
                <%
                        List list = SessionListener.getList();
                        out.println("共有" + list.size() + "名用户已登陆:";
                        for (int i = 0; i < list.size(); i++) {
                                out.println(list.get(i));                               
                        }
                %>
        </body>


TestSessionListener.jsp

<body>
   <%=new Integer(SessionListener.getCount()).toString() %>
   <form action="TestSessionAttributeListener.jsp">
                   <input type="text" name="name" />
                   <input type="submit" />
   </form>
  </body>



show.jsp

<script language="javascript">
                function detect()
                {
                        var xml;
                        try{
                                xml = new ActiveXObject("Microsoft.XMLHTTP";
                        }catch(e){
                                xml=new XMLHttpRequest();
                        }
                        xml.onreadystatechange=function(){
                                if(4==xml.readyState){
                                        if(200==xml.status){
                                                //window.alert("sssssssss";
                                        }else if(404==xml.status){
                                                //window.alert("zzzzzzzz";
                                        }else if(500==xml.status){
                                                //window.alert("bbbbbbb";
                                        }else{
                                                //window.alert("bbbbbbb";
                                        }
                                }
                        }                       
                        var post="";//构造要携带的数据
                        xml.open("POST","show.jsp",true);//使用POST方法打开一个到服务器的连接,以异步方式通信
                        xml.setrequestheader("content-length",post.length);
                        xml.setrequestheader("content-type","application/x-www-form-urlencoded";
                        xml.send(post);//发送数据
                        var res = xml.responseText;//接收服务器返回的数据
                        list.innerText=res;
                        //setTimeout("detect()",1000);//每隔5秒钟轮询一次
                }
                </script>
        </head>

        <body onload="detect()">
               
                         <script type="text/javascript">
                                setInterval("detect()",1000);
                         </script>
               
                <a id="list">
                <%
                        List list = SessionListener.getList();
                        out.println("共有" + list.size() + "名用户已登陆:");
                        for (int i = 0; i < list.size(); i++) {
                %>
                                <%=list.get(i)%>
                <%}%>
                </a>
        </body>


只看该作者    顶部
离线 yangm1203
初级会员



精华贴数 0
个人空间 0
技术积分 106 (15617)
社区积分 0 (947761)
注册日期 2006-5-22
论坛徽章:0
      
      

发表于 2007-5-15 07:22 
ddddddddddddddddddddddddddddddddddddddddddddddddd


只看该作者    顶部
离线 baggio0105
中级会员



来自 西安
精华贴数 0
个人空间 0
技术积分 640 (2906)
社区积分 586 (1240)
注册日期 2006-4-5
论坛徽章:6
itpub2007年荐股参与纪念徽章会员2007贡献徽章生肖徽章2007版:鸡2008年新春纪念徽章生肖徽章:猪生肖徽章:猪
      

发表于 2007-5-15 08:56 
show.jsp 里

这句“ xml.open("POST","show.jsp",true);   ”好象有问题。

我觉得不应该是向show.jsp自身页面提交请求,而应该向另外一个页面,或者servlet提交。(最好是servlet)

然后获得返回的 xml.responseText 或者 xml.responseXML , 再进行数据的处理。


只看该作者    顶部
离线 yangm1203
初级会员



精华贴数 0
个人空间 0
技术积分 106 (15617)
社区积分 0 (947761)
注册日期 2006-5-22
论坛徽章:0
      
      

发表于 2007-5-15 17:59 
我也试着向其他页面提交试过  但就是不知道怎么才能获取哪个list和怎么显示   唉 异步提交确实不太容易入手


只看该作者    顶部
离线 qqwjz
初级会员



精华贴数 0
个人空间 0
技术积分 8 (113794)
社区积分 0 (1120752)
注册日期 2006-9-25
论坛徽章:0
      
      

发表于 2007-5-15 20:13 
最关键就是“setInterval("detect()",1000);”


只看该作者    顶部
离线 yangm1203
初级会员



精华贴数 0
个人空间 0
技术积分 106 (15617)
社区积分 0 (947761)
注册日期 2006-5-22
论坛徽章:0
      
      

发表于 2007-5-16 01:36 
dddddddddddddddddddddddddddddddddddddddd


只看该作者    顶部
离线 baggio0105
中级会员



来自 西安
精华贴数 0
个人空间 0
技术积分 640 (2906)
社区积分 586 (1240)
注册日期 2006-4-5
论坛徽章:6
itpub2007年荐股参与纪念徽章会员2007贡献徽章生肖徽章2007版:鸡2008年新春纪念徽章生肖徽章:猪生肖徽章:猪
      

发表于 2007-5-16 13:41 
在ajax里,前台与后台是通过XML来交互的,也就是前台提交一个请求, 后台响应后返回的数据是以XML(XMLHttpRequest.responseXML)形式出现的。当然,简单的数据如yes,no,success等也可以用字符串(XMLHttpRequest.responseText)的形式。

这个时候你就可以在前台页面处理从后台返回的XML了
XML的内容类似与:<student><name>ABC</name><age>20</age></student>
然后调用getElementsByTagName()等方法来解释XML即可


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问