现在的位置: 首页 > 综合 > 正文

Ajax回显server端的执行信息

2013年10月22日 ⁄ 综合 ⁄ 共 6127字 ⁄ 字号 评论关闭

今天有人问"页面可以用ajax通过事件调java方法,但有是我想把java方法执行过程中的某些提示信息自由自动的反馈给页面。该怎么办", 我下来就做了一个demo. 现在贴上来, 供后来者参考.

我用的是spring环境, 所有的controller都继承子Controller;
RegisteController:用来模拟用户注册的步骤, 它会产生一些执行过程中的信息放到一个链表里;
InfoController: 用来把链表中最顶端的那条信息.发送给客户.
用prototype的ajax来发送请求.
发送请求的同时, 发送另外一个请求用来得到执行过程中的提示信息. 而这个过程递归执行, 直到收到"finish" 消息.

jsp文件, 用来发送ajax请求和显示回显信息. 
 注意导入的prototype的路径.

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.     <head>
  5.         <title>Testing page</title>
  6.         <script type="text/javascript" src="js/prototype-1.5.1.2.js"></script>
  7.         <script type="text/javascript">
  8.             function postAjax(){
  9.                 var myAjax = new Ajax.Request(
  10.                     'register.do',
  11.                     {
  12.                         method: 'post',
  13.                         parameters: {username: 'username', password: 'password'},
  14.                         onComplete: doComplete
  15.                     }
  16.                 );
  17.                 alert("request send.");
  18.                 getInfo();
  19.             }
  20.             function getInfo(){
  21.                 var infoAjax = new Ajax.Request(
  22.                     'info.do',
  23.                     {
  24.                         method: 'get',
  25.                         parameters: {},
  26.                         onComplete: doResult
  27.                     }
  28.                 );
  29.             }
  30.             
  31.             function doResult(req){
  32.                 if(req.responseText=='finish'){
  33.                     return;
  34.                 }
  35.                 //alert(req.responseText);
  36.                 var myDiv = document.createElement("div");
  37.                 var infoText = document.createTextNode(req.responseText);
  38.                 myDiv.appendChild(infoText);
  39.                 $(info).appendChild(myDiv);
  40.                 //循环发送请求得到执行信息.
  41.                 getInfo();
  42.             }
  43.             
  44.             function doComplete(){
  45.                 
  46.             }
  47.         </script>
  48.         <style type="text/css">
  49.         html,body {
  50.             font-family: Verdana, Arial, Helvetica, sans-serif;
  51.             font-size: 11pt;
  52.             margin: 0;
  53.             padding: 0;
  54.             border: 0 none;
  55.             overflow: hidden;
  56.             height: 100%;
  57.         }
  58.         .title{
  59.             font-weight: bold;
  60.         }
  61.         </style>
  62.     </head>
  63.     <body>
  64.         <div><a href="javascript: postAjax();">点击将提交一个ajax请求, 模拟执行用户注册行为. 这个请求得执行过程将显示在下面.</a></div>
  65.         <div id="info" style="width: 400px; height: 200px; overflow: scroll; border: solid red 1px;">
  66.             <div class="title">The response information comes from server: </div>
  67.             
  68.         </div>
  69.     </body>
  70. </html>

RegisteController:

  1. import java.util.LinkedList;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.commons.logging.Log;
  5. import org.apache.commons.logging.LogFactory;
  6. import org.springframework.web.servlet.ModelAndView;
  7. import org.springframework.web.servlet.mvc.Controller;
  8. public class RegisteController implements Controller {
  9.     private Log log = LogFactory.getLog(getClass());
  10.     
  11.     public ModelAndView handleRequest(HttpServletRequest arg0,
  12.             HttpServletResponse arg1) throws Exception {
  13.         String username = arg0.getParameter("username");
  14.         String password = arg0.getParameter("password");
  15.         log.info("username:" + username + " password:" + password);
  16.         /**
  17.          * 下面的infoList将用来存放执行过程中的提示信息. 
  18.          * 之所以用LinkedList是因为LinkedList具有队列操做的特点.
  19.          * 最先放进去的信息可以最先被取走.
  20.          */
  21.         LinkedList<String> infoList = new LinkedList<String>();
  22.         /**
  23.          * 这里放的信息仅仅是起到模拟作用.
  24.          * 我一次性把所有的信息都放进去了.只是为了模拟效果.
  25.          * 你可以根据实际需要, 在需要的时候再放入信息.
  26.          */
  27.         infoList.add("username: " + username);
  28.         //do something else.
  29.         infoList.add("password: " + password);
  30.         //do something else.
  31.         infoList.add("Try to validate username......");
  32.         //do something else.
  33.         infoList.add("this username is valid to use");
  34.         //do something else.
  35.         infoList.add("Try to validate password......");
  36.         //do something else.
  37.         infoList.add("the password is valid to use");
  38.         //do something else.
  39.         infoList.add("Try to add this user into database......");
  40.         //do something else.
  41.         infoList.add("try to set entitlement for this user");
  42.         //do something else.
  43.         infoList.add("user registering ok.");
  44.         //do something else.
  45.         infoList.add("succeed......");
  46.         arg0.getSession().setAttribute("infoList", infoList);
  47.         arg1.getWriter().write("succeed");
  48.         return null;
  49.     }
  50. }

InfoController:

  1. import java.util.LinkedList;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.Controller;
  6. /**
  7.  * @author Administrator
  8.  * 这个controller用来向客户端发送执行过程中产生的信息.
  9.  */
  10. public class InfoController implements Controller{
  11.     public ModelAndView handleRequest(HttpServletRequest arg0,
  12.             HttpServletResponse arg1) throws Exception {
  13.         LinkedList<String> list = (LinkedList<String>)arg0.getSession().getAttribute("infoList");
  14.         /**
  15.          * 为了模拟延迟效果, 这里睡一小会儿.
  16.          */
  17.         Thread.sleep(1000);
  18.         if(list==null){
  19.             arg1.getWriter().write("please wait a second.");
  20.             return null;
  21.         }
  22.         if(list.size()==0){
  23.             arg1.getWriter().write("finish");
  24.             return null;
  25.         }
  26.         /**
  27.          * linkedList.remove()将取走第一条信息.
  28.          */
  29.         String info = list.remove();
  30.         arg1.getWriter().write(info);
  31.         return null;
  32.     }
  33. }

spring配置文件:

  1. ......
  2. <bean name="/register.do" class="com.fydy.action.RegisteController" />    
  3. <bean name="/info.do" class="com.fydy.action.InfoController" />
  4. ......

(end)

==========================soe==================================

/**JS画图,JS小游戏,JS代码集合, JS地图,JS写RPG游戏,JS动画,JS绘图, JS对象, JS函数, JS经典 例子,JS面向对象, javascript画图,javascript小游戏,javascript代码集合, javascript地图,javascript写RPG游戏,javascript动画,javascript绘图, javascript对象, javascript函数, javascript经典例子,javascript面向对象,ajax代码,ajax入门,ajax代码,ajax+java,ajax技术,css网站,css资源,css代码,css学习,css下载,css教程,css分享**/

抱歉!评论已关闭.